gpt4 book ai didi

c++ boost有条件地从容器中删除

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:37 27 4
gpt4 key购买 nike

我想做一些类似 C# linq 风格的事情:

SomeColection <SomeType> someColection;
someColection.Remove(something => something > 2);

它会删除所有大于 2 的东西(或任何其他 bool 条件)...

在项目中使用boost...

最佳答案

C++0x(使用 lambda):

container.erase( std::remove_if( container.begin(), container.end(), 
[]( int v ) { return v > 2; } ),
container.end() );

eraseremove_if 组合的原因是 STL 算法适用于迭代器,而不适用于容器。他们重新定位容器的内容,但不修改容器本身。

C++03:

container.erase( std::remove_if( container.begin(), container.end(), 
std::bind2nd( std::greater<int>(), 2 ) ),
container.end() );

这可能看起来有点简单,但它也不太灵活,因为已经定义的谓词只有那么多。对于更复杂的操作,您必须编写自己的谓词仿函数。

关于c++ boost有条件地从容器中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3139086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com