【发布时间】:2012-05-22 22:28:21
【问题描述】:
我有一个 vector<MyType> 并想要另一个 vector<MyType> 只包含满足一些简单标准的 MyTypes,例如某些数据成员等于某物。解决这个问题的最佳方法是什么?
【问题讨论】:
标签: c++
我有一个 vector<MyType> 并想要另一个 vector<MyType> 只包含满足一些简单标准的 MyTypes,例如某些数据成员等于某物。解决这个问题的最佳方法是什么?
【问题讨论】:
标签: c++
使用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); } );
【讨论】:
copy_if 仅在 C++11 中,对吧?
remove_copy_if。
v2.erase(remove_if(str.begin(), str.end(), simple_criterion), str.end);
使用一点 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 适配器(过滤、转换、反转等)一起使用
有关更多展示材料和完整示例,请参见此处:
【讨论】: