c++ - 过滤 STL 容器的现代方法?

标签 c++ c++11 stl

在使用 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/

相关文章:

c++ - hidapi无法在ubuntu下编译任何代码

c++ - 在 C++ 中求和 1<<2 和 1<<3 时出现奇怪的输出

c++ - C 风格使用现代 C++ 类

c++ - 从工厂方法返回的 const unique_ptr 不需要空检查吗?

c++ - 如何简洁地将默认构造的对象插入 std::vector

c++ - 如果我在 C++ 类中声明一个 vector ,它会被销毁然后类的 instate 被销毁吗?

c++ - 映射/设置迭代器不可取消引用运行时错误

c++ - Makefile编译后如何运行程序

c++ - 递归函数c++的段错误

c++ - 编译器认为 "A(A&)"暂时接受右值?