Tym razem, piszę o problemie który już rozwiązałem, ale pomyślałem że może komuś się przyda (sam na sieci nic nie znalazłem)
Miałem do dyspozycji listę charów (jakiś string na którym musiałem usuwać dużo elementów):
usuwanie elementów iterując do przodu:
std::list<char> s;
// tutaj dodanie jakis elementow do s
for (std::list<char>::iterator i=s.begin(); i!=s.end(); ++i)
{
powrot: // mozliwe ze da sie to zrobic jakos bez goto, ale aktualnie nie mam pomyslu jak
if (*i=='a' || *i=='g') // jakis przykladowy warunek
{
i=s.erase(i);
if (i!=s.end())
goto pocz;
else
break;
}
}
problem jaki pojawial sie przy probie normalnej iteracji byl taki, ze po usunieciu elementu pomijany byl jeden element.
usuwanie iterując do tyłu (tutaj część kodu znalazlem na necie):
std::list<char> s;
// tutaj dodanie jakis elementow do s
for (std::list<char>::reverse_iterator i=s.rbegin(); i!=s.rend(); ++i)
{
powrot: // mozliwe ze da sie to zrobic jakos bez goto, ale aktualnie nie mam pomyslu jak
if (*i=='a' || *i=='g') // jakis przykladowy warunek
{
i=std::list<char>::reverse_iterator(s.erase((++i).base())); --i;
}
}
w kodzie mógł wkraść się jakiś błąd ponieważ przerabiałem swój rzeczywisty kod i różnie to bywa.