“向量擦除迭代器超出范围”错误
Posted
技术标签:
【中文标题】“向量擦除迭代器超出范围”错误【英文标题】:"Vector erase iterator outside range" error 【发布时间】:2017-06-30 17:25:29 【问题描述】:我正在尝试运行书中提供的以下示例来测试功能,但收到有关“矢量擦除迭代器超出范围”的错误消息。我不明白这是什么意思。
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
int main()
using MyVector = vector<int>;
MyVector newVector = 0,1,2 ;
newVector.push_back(3);
newVector.push_back(4);
MyVector::const_iterator iter = newVector.cbegin() + 1;
newVector.insert(iter, 5);
newVector.erase(iter);
for (auto iter = newVector.begin(); iter != newVector.end(); ++iter)
cout << *iter << endl;
return 0;
【问题讨论】:
你有没有把错误信息放到谷歌上并阅读结果? 相关/欺骗:***.com/questions/6438086/iterator-invalidation-rules 阅读cplusplus.com/reference/vector/vector/insert 了解迭代器有效性 【参考方案1】:newVector.insert(iter, 5)
之后,iter
无效。这就是insert
返回迭代器的原因。你的代码应该是
iter = newVector.insert(iter, 5);
【讨论】:
感谢您的指导。以上是关于“向量擦除迭代器超出范围”错误的主要内容,如果未能解决你的问题,请参考以下文章