在我的程序中,我有一个数组&#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
中的所有值时,只返回零。这是为什么?
答案 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);