std :: remove_if无法正常工作

Ale*_*hul 2 c++ stl remove-if

在这里我的代码.我希望通过成功调用方法'release'从vector中删除所有元素.

bool foo::release()
{
    return true;
}

// ...
vector<foo> vec;
// ...
remove_if(vec.begin(), vec.end(), [](foo & f) { return f.release() == true; });
// ...
Run Code Online (Sandbox Code Playgroud)

remove_if不要删除所有元素vector vec.怎么样remove_if

jua*_*nza 10

std::remove_if重新排列向量的元素,使您想要保留的元素在范围内[vec.begin(), return_iterator)(注意部分开放的范围).因此,您需要调用std::vector::erase以确保向量仅包含所需的元素.这称为擦除删除习语:

auto it = remove_if(vec.begin(),
                    vec.end(),
                    [](foo & f) { return f.release() == true; });

vec.erase(it, vec.end());
Run Code Online (Sandbox Code Playgroud)

在这里,为了清晰起见,我将它分成两行,但它通常被视为一行.