“向量擦除迭代器超出范围”错误

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);

【讨论】:

感谢您的指导。

以上是关于“向量擦除迭代器超出范围”错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥我没有得到数组超出范围错误? [复制]

Swift 错误:索引超出范围

我收到错误:致命错误:索引超出范围

准备转场时致命错误索引超出范围

UICollectionView 给出“索引超出范围”错误

Sonarqube 扫描错误,行超出范围?