c++ erase 中的坑

 

先看一段正常的代碼ios

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

    return 0;
}

移除中間的一段字符spa

很好的發揮了做用code

而後改了一下 但願依次刪除字符串中的元素blog

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

 

結果出錯而且返回異常字符串

查資料得知erase的返回值爲被刪除迭代器的下一個迭代器string

修改程序it

 

   // 正確寫法
    for (it = str.begin(); it != str.end(); )   // 注意這裏去掉了it++
    {
        cout << *it << " str: " << str << endl;
        it = str.erase(it);

    }

 

 結果無異常io

相關文章
相關標籤/搜索