8

我有一个vector<MyType>并且想要另一个vector<MyType>只包含满足一些简单标准的 MyTypes,例如某些数据成员等于某些东西。解决这个问题的最佳方法是什么?

4

2 回答 2

17

使用copy_if

#include <algorithm>  // for copy_if
#include <iterator>   // for back_inserter

std::vector<MyType> v2;
std::copy_if(v1.begin(), v1.end(), std::back_inserter(v2),
             [](MyType const & x) { return simple_citerion(x); } );
于 2012-05-22T22:31:12.897 回答
7

使用一点 Boost,您可以:

std::vector<int> v = {1,2,-9,3};

for (auto i : v | filtered(_arg1 >=0))
    std::cout << i << "\n";

此示例将 Phoenix 用于由表达式模板 ( _arg1 >= 0) 定义的隐式 lambda,但您可以将任何可调用的(C++03 或更高版本)与 Boost 适配器(fitlered、transformed、reverse 等)一起使用

有关更多展示材料和完整示例,请参见此处:

于 2012-05-22T22:31:38.480 回答