簡體   English   中英

使用C ++ void函數處理向量數組

[英]Manipulating a vector array with a C++ void function

在我的程序中,我有一個數組“ vector< vector<double> > convos ”,具有3行和任意數量的列Nconv 每列代表大小為N的組中2個人之間的可能對話,每列的第2和第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中的所有值時, convos只會返回零。 為什么是這樣?

向量不變,因為您通過值傳遞了它:

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

這意味着矢量將被復制到函數本地的變量中。 更改在該副本上完成,函數返回后銷毀。 您必須通過參考傳遞矢量:

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

有關差異的更多說明,請參見此問題

除非我弄錯了,否則您傳遞一個空向量並向其添加值? 在這種情況下,不傳遞任何矢量而是創建一個新矢量可能會更簡單:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM