#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
string s = "Haven't got an idea why.";
auto beg = s.begin();
auto end = s.end();
while (beg < end)
{
cout << *beg << '\n';
if (*beg == 'a')
{//whithout if construct it works perfectly
beg = s.erase(beg);
}
++beg;
}
return 0;
}
Почему, если я удаляю один или несколько символов из этой строки, этот код прерывается? Я полагаю, что он имеет какое-то отношение к возвращенному итератору после операции стирания, создаваемой с более высоким адресом, чем конечный итератор, но я не уверен, и это, безусловно, неправильное поведение. Или это?поведение странного итератора
Возможно, проще стереть символы из 'end()' в 'begin()', так как 'begin()' не будет меняться при стирании символов. – MSalters