在使用 C# 多年后回到 C++,我想知道现代的 - 阅读:C++11 - 过滤数组的方式是什么,即我们如何实现与此 Linq 查询类似的东西:
var filteredElements = elements.Where(elm => elm.filterProperty == true);
为了过滤元素的 vector (为了这个问题,strings
)?
我真诚地希望现在取代需要定义 显式方法 的旧 STL 风格算法(甚至像 boost::filter_iterator
这样的扩展)?
最佳答案
查看来自 cplusplus.com 的示例 std::copy_if
:
std::vector<int> foo = {25,15,5,-5,-15};
std::vector<int> bar;
// copy only positive numbers:
std::copy_if (foo.begin(), foo.end(), std::back_inserter(bar), [](int i){return i>=0;} );
std::copy_if
在这里为 foo
中的每个元素计算 lambda 表达式,如果返回 true
则将值复制到 条形
.
std::back_inserter
允许我们使用迭代器在 bar
的末尾插入新元素(使用 push_back()
)无需先将其调整为所需的大小。
关于c++ - 过滤 STL 容器的现代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21204676/