好的,所以我试图将指针传递给像这样的参数。
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];
}
答案 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/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指针条件,它有助于清理语法。