传递vector <vector <int>&gt;指向参数的指针?</vector <int>

时间:2011-04-06 06:40:54

标签: c++ pointers vector

好的,所以我试图将指针传递给像这样的参数。

void function(vector<vector<int> > *i){
 vector<int> j;
 j.push_back(5);
 i->push_back(j);
}

并使用function(&i)

进行调用

但是当我这样做时,我说[0] [0]是0而不是5。

为什么会这样?

编辑:

int main(){ 
vector<vector<int> > test;
function(&test);
cout << test[0][0];
}

4 个答案:

答案 0 :(得分:3)

您可以尝试以下代码:

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

答案 1 :(得分:0)

我假设您将函数调用为function(test)而不是function(&test),因为第二个函数将无法编译。您在main中的代码是错误的。您应该将测试声明为vector<vector<int> > test;(不含*)。在当前形式中,您刚刚将指针定义为向量而不实际分配向量本身。如果您尝试取消引用此指针(您尝试执行i->push_back(),则将调用未定义的行为。

答案 2 :(得分:0)

至少在我的机器上,这给了我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]);
}

答案 3 :(得分:0)

您应该使用引用而不是指针,除非NULL是指针的可接受值。通过这样做,您可以避免必须测试NULL指针条件,它有助于清理语法。