使用 C++ void 函数操作向量数组
Posted
技术标签:
【中文标题】使用 C++ void 函数操作向量数组【英文标题】:Manipulating a vector array with a C++ void function 【发布时间】:2014-02-18 15:49:51 【问题描述】:在我的程序中,我有一个数组“vector< vector<double> > convos
”,其中包含 3 行和任意数量的列 Nconv
。每列代表大小为N
的组中的两个人之间可能进行的对话,每列中的第二和第三个单元格包含一个标记特定个人的数字。
所以我写了一小段代码循环遍历这个数组,并用一对唯一的整数填充每一列。
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】:向量不会改变,因为你通过值传递它:
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);
【讨论】:
我添加了另一种方法,以防您觉得有用。以上是关于使用 C++ void 函数操作向量数组的主要内容,如果未能解决你的问题,请参考以下文章