将指针向量传递给c ++中的函数[重复]

Posted

技术标签:

【中文标题】将指针向量传递给c ++中的函数[重复]【英文标题】:Pass a vector of pointers to function in c++ [duplicate] 【发布时间】:2019-11-29 16:54:33 【问题描述】:

我在这里看到了很多帖子,但没有一个能解释我想要做什么。 我有向量vector <Car*> carVector;,我想将它传递给一个函数,以便我可以读取其中对象的信息。 目标是通过它,然后我可以在这个 cicle 中使用它

for (i = 0; i < racetrack.size(); i++) 
    for (int j = 1; j < nRaceTracks + 1; j++) 
        if (racetrack[i]->getNome() == info[j]) 
            size= racetrack[i]->getTrackSize() / 100;
            for (int c = 0; c < carVector.size(); c++)
                carVector[c]->chargeBattery(500);
        
    

【问题讨论】:

您遇到了什么问题?请显示功能和您尝试过的内容。 void Foo(vector&lt;Car*&gt; carVector) ... 你必须更具体。传递指针向量并没有什么特别之处。 接收向量的函数是void Campeonato::criaCampeonato(string* info, vector&lt;Car*&gt; *carVector, vector&lt;racetrack*&gt; *racetrack),但我不知道我是否以正确的方式传递向量 你为什么要传递一个指向向量的指针?通过值或引用传递向量本身(如果您希望调用者看到更改)。如果您不想复制或修改向量,也可以通过常量引用传递。 【参考方案1】:

对于您提到的函数,只需根据情况通过值、引用或常量引用传递向量,如下所示:

值: void Campeonato::criaCampeonato(string* info, vector&lt;Carro*&gt; vectorCarro, vector&lt;Autodromo*&gt; *vectorAutodromo)

参考: void Campeonato::criaCampeonato(string* info, vector&lt;Carro*&gt;&amp; vectorCarro, vector&lt;Autodromo*&gt; *vectorAutodromo)

常量参考: void Campeonato::criaCampeonato(string* info, const vector&lt;Carro*&gt;&amp; vectorCarro, vector&lt;Autodromo*&gt; *vectorAutodromo)

如果您必须将其作为指针传递,那么您可以在函数中取消引用它以将其用作数组,如下所示:

void Campeonato::criaCampeonato(string* info, vector<Carro*> *vectorCarro, vector<Autodromo*> *vectorAutodromo) 
  for (i = 0; i < racetrack.size(); i++) 
    for (int j = 1; j < nRaceTracks + 1; j++) 
        if (racetrack[i]->getNome() == info[j]) 
            size= racetrack[i]->getTrackSize() / 100;
            for (int c = 0; c < carVector.size(); c++)
                (*vectorCarro)[c]->chargeBattery(500);
        
    
  

【讨论】:

【参考方案2】:

从您在 cmets 中给出的 sn-p 中,您正在尝试传递指针。你不想这样做。您需要参考:

void Campeonato::criaCampeonato(string *info, const vector<Car*> &carVector, const vector<racetrack*> &racetrack) 
    for (size_t i = 0; i < racetrack.size(); i++) 
        for (int j = 1; j < nRaceTracks + 1; j++)  // you will need to pass nRaceTracks in too
            if (racetrack[i]->getNome() == info[j]) 
                size= racetrack[i]->getTrackSize() / 100;
                for (size_t c = 0; c < carVector.size(); c++)
                    carVector[c]->chargeBattery(500);
            
        
    

【讨论】:

以上是关于将指针向量传递给c ++中的函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将指针(矩阵)传递给c中的函数[重复]

C ++将向量传递给函数:引用与指针,哪个是首选? [复制]

如何通过c中的指针传递二维数组[重复]

如何将指针分配给函数中的新对象,而该对象在退出后不会消失[重复]

将参数作为接口传递[重复]

将参数从php中的数组传递给构造函数[重复]