How do you erase *AND CONTINUE* using a std::reverse_iterator?

前端 未结 2 1959
野性不改
野性不改 2020-12-16 21:01

I\'ve been up and down stackoverflow and even the very, very nice Dr. Dobbs article but I can\'t find a definitive answer to the question.

A section of the answer to

2条回答
  •  佛祖请我去吃肉
    2020-12-16 21:23

    It should just be

    std::list::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;
       }
    }
    

提交回复
热议问题