我有一个包含整数元素 {1,2,3,4} 的 vector ,我试图删除我的 func 方法中的最后一个元素。当我使用 pop_back() 和 back() 时它工作正常。但是当我在方法中使用迭代器时,它说最后一个元素仍然是 4。
此外,如果我尝试在我的 main 方法中打印 vector 的最后一个元素,它仍然输出 4。
如果我想在 main 以外的方法中更改 vector 的内容,有人可以向我解释我应该怎么做吗?
我的代码:
using namespace std;
void func(vector<int> array) {
array.pop_back();
cout << "array.back() = " << array.back() << endl;
vector <int>::iterator it = array.end();
cout << "it.end() = " << (*it) << endl;
}
int main(void) {
vector <int> ar;
ar.push_back(1);
ar.push_back(2);
ar.push_back(3);
ar.push_back(4);
func(ar);
cout << "In main = " << ar.back() << endl;
return 0;
}
输出:
array.back() = 3
it.end() = 4
In main = 4
最佳答案
您将 vector 作为值传递,这意味着它已复制到函数中。如果你想在函数中修改它,你需要将它作为引用 (&
) 或指针 (*
) 传递,以便原始 vector 中的数据得到修改,而不是拷贝。
void func(vector<int>& array) // reference
void func(vector<int>* array) // pointer
我建议在这里使用引用,因为您无需担心空指针或需要更改您的任何方法(使用指针您需要更改 '.
's到 '->
's).
关于使用迭代器时 C++ vector 内容未更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769292/