[英]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.