vector iterator not incrementable问题

September03 2018-09-13 10:32:15
求助!存在vector容器buffers里的stack<int>数据类型,在执行下面的代码时发生错误,调试时发现是循环最后buffers为空时使用size()发生错误,可是为什么呢?如何修改呢?望解答,谢谢。
while (!buffers.empty()) {
for (auto it = buffers.begin(); it != buffers.end(); it++) {
while (!buffers.empty() && it != buffers.end() && it->empty()) {
if (buffers.size() > 1)it = buffers.erase(it);
else {
buffers.erase(it);
break;
}
}
if (buffers.size()!=0) //这一步运行时出现vector iterator not incrementable的问题
if (it != buffers.end() && (b.empty() || it->top() == b.top() + 1)) {
b.push(it->top());
it->pop();
}
}
}
...全文
312 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Italink 2018-09-14
  • 打赏
  • 举报
回复
buffers.erase(it);
it是buffers的迭代器,你把it给删了,没有了it,就无法执行it++;
解决方法
1、不用迭代器去变量,用buffers[i],i为循环变量;
2、使用后++,buffers.erase(it++);这样做了for循环每次的it++就需要做一些调整

64,639

社区成员

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

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