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); } ? ?结果无异常 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |