使用 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 函数操作向量数组的主要内容,如果未能解决你的问题,请参考以下文章

字符串向量和数组C++

我们如何在 C++ 中将二维数组/向量作为函数参数传递? [复制]

使用传入的参数在 C++ 中创建 3D 数组

C++ 函数返回一个向量/字符串,但不是一个数组

是否可以多线程同时执行非 void 函数? (C++)

在 gcc 中使用向量内在函数对常规数组进行别名