c++ erase 中的坑

2019-08-16 07:48:13来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

c++ 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); 
    }

 

结果出错并且返回异常

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

修改程序

 

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

    }

 

 结果无异常


原文链接:https://www.cnblogs.com/bugcreator/p/11178490.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:kuangbin专题 专题一 简单搜索 Fire Game FZU - 2150

下一篇:gcc5+opencv4.0.1 &quot;玄学&quot;bug记录