先看一段正常的代碼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