加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c++ erase 中的坑

发布时间:2020-12-16 07:19:36 所属栏目:百科 来源:网络整理
导读:? 先看一段正常的代码 #include iostream #include string using namespace std; int main() { string str = " 123456789 " ; str.erase(str.begin() + 2 ,str.end() - 2 ); cout str; return 0 ;} 移除中间的一段字符 很好的发挥了作用 然后改了一下 希望依

?

先看一段正常的代码

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

    }

?

?结果无异常

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读