如何使用std :: reverse_iterator擦除*AND CONTINUE*?

Mig*_*igs 9 c++ iterator stl erase

我一直在上下堆栈流,甚至非常非常好的Dobbs博士的文章,但我找不到这个问题的明确答案.

问题答案的一部分std :: reverse_iterator的缺点是什么?说它可能根本不可能.


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;
   }
}
Run Code Online (Sandbox Code Playgroud)

PS:我知道还有其他选择,比如erase_if(),但我正在寻找这个具体问题的答案.

MSN*_*MSN 15

它应该是

std::list<int>::reverse_iterator it = list.rbegin();

while(  it != list.rend() )
{
   int value=*it;
   if( some_cond_met_on(value) )
   {     
        ++it;
        it= reverse_iterator(list.erase(it.base()); // change to this!
   }
   else
   {
     ++it;
   }
}
Run Code Online (Sandbox Code Playgroud)