[英]Passing a vector<vector<int> > pointer to a argument?
好的,所以我試圖將指針傳遞給這樣的參數。
void function(vector<vector<int> > *i){
vector<int> j;
j.push_back(5);
i->push_back(j);
}
並使用function(&i)
調用
但是當我這樣做時,它說i [0] [0]是0而不是5。
為什么會這樣呢?
編輯:
int main(){
vector<vector<int> > test;
function(&test);
cout << test[0][0];
}
你可以試試這段代碼:
void f(vector<vector<int> > *i)
{
vector<int> j;
j.push_back(5);
i->push_back(j);
}
vector<vector<int> > i;
f(&i);
cout << i[0][0];
輸出:
5
演示: http : //ideone.com/hzCtV
或者,您也可以按如下所示通過引用傳遞: http : //ideone.com/wA2tc
我假設您將函數稱為function(test)
而不是function(&test)
因為第二個function(&test)
無法編譯。 您的main
代碼是錯誤的。 您應該將test聲明為vector<vector<int> > test;
(不帶*
)。 在當前形式下,您剛剛定義了指向向量的指針 ,而沒有實際分配向量本身。 如果嘗試取消引用該指針(嘗試執行i->push_back()
,則將調用未定義的行為。
至少在我的機器上,這給了我5分!
#include <vector>
#include <stdio.h>
using std::vector;
void vf(vector<vector<int> > * i) {
vector<int> j;
j.push_back(5);
i->push_back(j);
}
int main() {
vector<vector<int> > j;
vf(&j);
printf("c: %d\n",j[0][0]);
}
您應該使用引用而不是指針,除非NULL是指針可接受的值。 通過這樣做,您可以避免必須測試NULL指針條件,並且有助於清理語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.