使用C ++ void函数操作向量数组

时间:2014-02-18 15:49:51

标签: c++ arrays function vector void

在我的程序中,我有一个数组&#34; vector< vector<double> > convos&#34;有3行和任意数量的列Nconv。每列代表一个大小为N的群体中的两个人与第二个群体之间可能的对话。每列中的第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中的所有值时,只返回零。这是为什么?

1 个答案:

答案 0 :(得分:2)

矢量不会改变,因为你按值传递它:

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

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

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

有关差异的更多说明,请参阅此question

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

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);