zoukankan      html  css  js  c++  java
  • 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://luotianqi777.github.io/
  • 相关阅读:
    swift 上的 lazy
    oc runtime
    iOS布局
    ios微信支付 v3
    好用的工具
    自己曾经没注意的东西
    根据文字计算出label的高度
    项目swift的一些问题
    UIAppearance
    书签
  • 原文地址:https://www.cnblogs.com/bugcreator/p/11178490.html
Copyright © 2011-2022 走看看