Byłem w górę iw dół stackoverflow i nawet bardzo, bardzo miły Dr. Dobbs article, ale nie mogę znaleźć ostatecznej odpowiedzi na to pytanie.Jak usunąć * I KONTYNUUJ * używając std :: reverse_iterator?
Część odpowiedzi na pytanie What are the shortcomings of std::reverse_iterator? mówi, że może to w ogóle nie być możliwe.
std::list::reverse_iterator it = list.rbegin();
while( it != list.rend())
{
int value=*it;
if(some_cond_met_on(value))
{
++it;
list.erase(it.base());
}
else
{
++it;
}
}
PS: wiem, że istnieją inne alternatywy, takie jak erase_if(), ale szukam odpowiedzi na to konkretne pytanie.
dam jej spróbować . Jak wymyśliłeś ten jeden? (Po prostu prosi o naukę) – Migs
@Migs, niezmiennikiem odwrotnych iteratorów jest: '& * (reverse_iterator (i)) == & * (i - 1)'. Odwróć się od tego (lub po prostu pomyśl o usunięciu 'rbegin()') i dojdziesz do kodu w odpowiedzi. – MSN
Dzięki @MSN. Działało idealnie. Czytałem ten niezmiennik w artykule Dobbsa, ale chyba nie mogę pojąć jego implikacji. Będę patrzył, dopóki coś (mam nadzieję) się nie wydarzy. – Migs