c++ - C++:我在一种方法中得到一个迭代器,如何在另一种方法中通过迭代器修改原始列表?
问题描述
我有一个列表,我想在一种方法中按值查找列表项,在另一种方法中修改此项目。这是简化的代码:
using namespace std;
//find iterator by value
list<int>::iterator get_iterator(list<int> li,int value) {
list<int>::iterator it;
for(it = li.begin();it != li.end();it++) {
if(*it == value) {
return it;
}
}
return li.end();
}
int main() {
list<int> num_list;
for(int i = 0;i < 20;i++) {
num_list.push_back(i);
}
// print the list
for(list<int>::iterator it = num_list.begin();it != num_list.end();it++) {
cout << *it << endl;
}
list<int>::iterator target_it = get_iterator(num_list,10);
// cout << *target_it <<endl;
*target_it = 100; // try to modify the original list(num_list) by iterator.
// print the list again
for(list<int>::iterator it = num_list.begin();it != num_list.end();it++) {
cout << *it << endl;
}
}
原名单没有修改,有机会制作吗?
提前致谢
解决方案
list<int>::iterator get_iterator(list<int> li,int value)
按值获取列表,因此它是原始列表的副本。
返回迭代器后,副本列表被破坏,因此迭代器无效。使用它会调用未定义的行为。
您想通过引用传递列表
list<int>::iterator get_iterator(list<int> &li,int value)
//^^
推荐阅读
- javascript - 如何将在 html 页面上编辑的内容保存到 Google 工作表
- angular - Angular CLI 命令中的 i 是什么:ng gi student?
- android - Diff util 未在回收站视图中更新项目 UI
- excel - 循环遍历一些工作表以压缩 vba 代码的有效方法是什么?
- ansible - 从 Ansible 中的变量中提取子字符串
- swagger - 无论如何在与实际 API 不同的服务器上设置 Swagger 吗?
- python - 触发 Django 线程作为后台任务
- javascript - 使用coinflip命令javascript的discordbot代码错误
- powershell - 将函数指针从 PowerShell 传递到 DLL
- android - 如何在jetpack compose中将项目居中在Surface内