gpt4 book ai didi

c++ - 使用 C++ void 函数操作 vector 数组

转载 作者:行者123 更新时间:2023-11-30 04:08:24 24 4
gpt4 key购买 nike

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

所以我写了一小段代码,循环遍历这个数组,并用一对唯一的整数填充每一列,例如。

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 中的所有值时简单地归零。这是为什么?

最佳答案

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

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

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

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

查看此 question以获得对差异的更多解释。

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

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++ - 使用 C++ void 函数操作 vector 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21858704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com