使用迭代器时,C++矢量内容未更改
C++ vector content not changed while using iterator
我有一个包含整数元素{1,2,3,4}的向量,我试图删除func方法中的最后一个元素。当我使用pop_back()和back()时,它工作得很好。但是当我在方法中使用迭代器时,它说最后一个元素仍然是4。
此外,如果我试图在主方法中打印回向量的最后一个元素,它仍然输出4。
有人能向我解释一下,如果我想用main以外的方法更改向量的内容,我应该怎么做吗?
我的代码:
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
您将向量作为值传递,这意味着它将被复制到函数中。如果要在函数中修改它,则需要将其作为引用(&
)或指针(*
)传递,以便修改原始矢量中的数据,而不是副本。
void func(vector<int>& array) // reference
void func(vector<int>* array) // pointer
我建议在这里使用引用,因为您不需要担心空指针,也不需要更改任何方法(使用指针,您需要将".
"更改为"->
")。
您需要将传递给func()
的参数更改为通过引用,而不是像这样通过值:
#include <iostream>
#include <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 = 3
否则,将修改传递给func()
的矢量的副本,而不是原始矢量。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 如何在C++中将迭代器作为函数参数传递
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 为什么 C++ std::unordered_map 从 emplace/ 找到返回一个迭代器?