关于C++中vector执行insert方法后迭代器iter++的问题

qq_32339837 2016-05-05 09:41:11
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int main()
{
vector<int> data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
/*
*第一种
*/
// for (auto cur = data.begin(); cur != data.end(); ++cur)
// if (*cur & 0x1)
// {
// cur = data.insert(cur, *cur);
// cur+=1;
// }

/*
*第二种
*/
auto iter = data.begin();
while (iter != data.end())
{
if (*iter % 2)
{
iter = data.insert(iter, *iter);
iter += 2 ;
}
else
iter = data.erase(iter);
}

for (auto i : data)
cout << i << " ";
system("pause");
return 0;
}
我想问的是:第一种里面为什么cur只是自增1?insert不是返回新增加的元素吗?而新增加的元素又应该在当前元素的前面,所以cur应该自增2啊?而且书上的程序也是iter+=2,这个我就不明白了.............
第二个问题:第二种里面,为什么while循环里面去掉else之后程序不能正常运行.....
...全文
457 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
轻箬笠 2018-12-14
  • 打赏
  • 举报
回复
不建议在循环语句里面执行多次insert操作。
https://blog.csdn.net/jeffdeen/article/details/53454316
VisionCD 2018-12-14
  • 打赏
  • 举报
回复
第一种 是不是漏看了for循环里的++iter了?
赵4老师 2016-05-09
  • 打赏
  • 举报
回复
引用 6 楼 coldleaf 的回复:
哦哦,为什么会有遍历时修改容器这种危险的操作。
多线程惹的祸。
coldleaf 2016-05-09
  • 打赏
  • 举报
回复
哦哦,为什么会有遍历时修改容器这种危险的操作。
paschen 版主 2016-05-06
  • 打赏
  • 举报
回复
vector插入元素后迭代器是可能失效的
lm_whales 2016-05-06
  • 打赏
  • 举报
回复
insert 返回插入点位置 后面的数据,逐次移动位置 因此,旧的数据,新位置为 iter +1 于是需要两次++操作,才刚好指向下一个位置。
lm_whales 2016-05-06
  • 打赏
  • 举报
回复
这里,涉及的都是细节和技巧,所以要处处留心
lm_whales 2016-05-06
  • 打赏
  • 举报
回复
至于第二个,去掉 else 可能会绕过 end()

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧