2014-02-18 24 views
1

在我的程序中,我有一個數組「vector< vector<double> > convos」,其中有3行和任意數量的列Nconv。每一列表示2個人之間從一組具有尺寸N可能的談話,並且在每列中的第二&第三細胞包含多個標記的特定個體。使用C++ void函數操作矢量數組

所以我寫的一小段代碼的循環這個數組,並用獨特的對整數例如填寫每一列。

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中的所有值只是簡單地返回到零。爲什麼是這樣?

回答

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

尼斯一個非常感謝! – fred

+0

我已經添加了另一種方法,以防您發現它有用。 – user2079303