迭代列表时C++从列表中删除

JnB*_*ymn 4 c++ list

我有一个std::listBananas,我想摆脱坏的.是否有任何相对简单的方法来执行以下伪代码?

foreach(Banana banana in bananaList)
{
    if(banana.isBad()) bananaList.remove(banana);
}
Run Code Online (Sandbox Code Playgroud)

(从C#和Java转换到C++是一条艰难的道路.)

Bil*_*eal 7

bananaList.remove_if(std::mem_fun_ref(&Banana::isBad));
Run Code Online (Sandbox Code Playgroud)

请注意,您可能应该使用std::vector而不是std::list- vector在99.9%的情况下表现更好,并且更容易使用.

编辑:如果您使用向量,向量没有remove_if成员函数,所以您必须使用plain remove_ifin namespace std:

bananaVector.erase(
    std::remove_if(bananaVector.begin(), bananaVector.end(), std::mem_fun_ref(&Banana::isBad)), 
    bananaVector.end());
Run Code Online (Sandbox Code Playgroud)

  • @John:由于更好的缓存局部性,实际上`std :: vector`在理论上`std :: list`的表现通常更好.你必须衡量. (2认同)