当我有这段代码时:
int push666 (vector<int> vect){
vect.push_back(666);
}
int main()
{
vector<int> a;
a.reserve(1);
push666(a);
cout << a[0];
return 0;
}
cout只会打印出一些垃圾值。似乎函数对向量没有持久影响。我该怎么办呢?
答案 0 :(得分:3)
您通过引用而不是值传递向量。
int push666 (vector<int>& vect){
// ^^^
vect.push_back(666);
}
答案 1 :(得分:3)
C ++支持通过值和引用传递。
在您的代码中,std::vector<int>
会按价值传递给函数 - 它会被复制并且此副本会被修改并std::vector<int>::push_back
编
为了防止复制 1 ,所以该函数直接在a
上运行,您需要通过引用传递:
int push666 (vector<int>& vect){
vect.push_back(666);
}
另一方面,C方式(或糟糕的C ++方式)是传递指针:
int push666 (vector<int>* vect){
vect->push_back(666);
}
请注意,指针在此处按值传递。
1 标准没有指定,但引用可能是用指针实现的,因此技术上某些复制是
答案 2 :(得分:1)
您应该通过引用传递它:
int push666 (vector<int>& vect){
vect.push_back(666);
}
或指针不太常见:
int push666 (vector<int>* vect){
vect->push_back(666);
}
push666(&a); // use & to take address of a
两种方式都允许您修改传递给函数的参数