欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c++ erase 中的坑

程序员文章站 2022-03-20 16:33:16
先看一段正常的代码 移除中间的一段字符 很好的发挥了作用 然后改了一下 希望依次删除字符串中的元素 结果出错并且返回异常 查资料得知erase的返回值为被删除迭代器的下一个迭代器 修改程序 结果无异常 ......

 

先看一段正常的代码

#include <iostream> 
#include <string> 
using namespace std; 
 
int main() { 
 
    string str = "123456789"; 
    str.erase(str.begin() + 2, str.end() - 2); 
    cout << str; 

    return 0;
}

移除中间的一段字符

很好的发挥了作用

然后改了一下 希望依次删除字符串中的元素

    string::iterator it; 
    // 错误写法 
    for (it = str.begin(); it != str.end(); it++) 
    { 
        cout << *it << " str: " << str << endl; 
        str.erase(it); 
    }

c++ erase 中的坑

 

结果出错并且返回异常

查资料得知erase的返回值为被删除迭代器的下一个迭代器

修改程序

 

   // 正确写法
    for (it = str.begin(); it != str.end(); )   // 注意这里去掉了it++
    {
        cout << *it << " str: " << str << endl;
        it = str.erase(it);

    }

c++ erase 中的坑

 

 结果无异常