邹荷菱,打印机驱动卸载,东痒岛
先看一段正常的代码
#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); }
结果无异常
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论