繁体   English   中英

使用C ++ void函数处理向量数组

[英]Manipulating a vector array with a C++ void function

在我的程序中,我有一个数组“ vector< vector<double> > convos ”,具有3行和任意数量的列Nconv 每列代表大小为N的组中2个人之间的可能对话,每列的第2和第3单元格包含标记特定个人的数字。

因此,我在该数组的循环中写了一小段代码,并在每一列中填充了一对唯一的整数,例如。

convos [i] [2] = 1 2 3 2 3

convos [i] [1] = 0 0 0 1 1 ....依此类推。

我为这些代码编写的代码很有效,但是太凌乱了,无法在我的int main()遗忘了,无论如何,使用外部函数可能是一个好习惯。

我的问题是,当我在主代码中调用函数insertpairs时,什么也没发生...有人能指出我在这里明显不见的东西吗?

#include <iostream>
#include <vector>

using namespace std;
using std::vector;

void insertpairs(vector<vector<double> > convos, int Nconv, int N)
{
int a(0), b, c(0);
while (c < Nconv){
    b = a+1;
    while (b < N){
        convos[c][1] = a;
        convos[c][2] = b;
        b++;
        c++;
    }
   a++;
  }
 }

int main(){

int N(4), Nconv;
vector<vector<double> > convos;

Nconv = 0;
for (int i=1; i<=N; i++){
    Nconv = Nconv + N-i;
} // Calculates # of possible convos based on N.

insertpairs(convos, Nconv, N);
        // breakpoint here.
.....   // code continues, but rest isn't relevant.
}

如果我在void函数中放置一个断点,我可以看到它正在正常工作,但是当它完成数组convos中的所有值时, convos只会返回零。 为什么是这样?

向量不变,因为您通过值传递了它:

void insertpairs(vector<vector<double> > convos, int Nconv, int N)

这意味着矢量将被复制到函数本地的变量中。 更改在该副本上完成,函数返回后销毁。 您必须通过参考传递矢量:

void insertpairs(vector<vector<double> >& convos, int Nconv, int N)

有关差异的更多说明,请参见此问题

除非我弄错了,否则您传递一个空向量并向其添加值? 在这种情况下,不传递任何矢量而是创建一个新矢量可能会更简单:

vector<vector<double> createpairs(int Nconv, int N) {
    vector<vector<double> pairs;
    // now add the pairs here
    return pairs;
}

而在主要方面:

vector<vector<double> > convos = createpairs(Nconv, N);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM