copy_if
不在C ++中非常烦人。有谁知道它是否会在C ++ 0x中?
答案 0 :(得分:7)
由于C ++ 0x尚未最终确定,您只能查看最新的draft。
答案 1 :(得分:5)
与此同时,使用copy_if()
创建自己的remove_copy_if()
并不是很难:
#include <functional>
struct my_predicate : std::unary_function<my_arg_type, bool> {
bool operator()(my_arg_type const& x) const { ... }
};
// To perform "copy_if(x, y, z, my_predicate())", write:
remove_copy_if(x, y, z, std::not1(my_predicate()));
使用not1()
要求您的谓词类提供嵌套类型argument_type
,标识参数的类型 - 如上所示,一种方便的方法是从{{1其中unary_function<T, U>
是参数类型。
答案 2 :(得分:4)
为了完整起见,如果有人用谷歌搜索这个问题,应该提到现在(在C ++ 11及更高版本中)有一个copy if算法。它的行为与预期一致(将某个谓词返回true的范围内的元素复制到另一个范围)。
典型的用例是
std::vector<int> foo{ 25, 15, 5, -5, -15 };
std::vector<int> bar;
// copy only positive numbers:
auto it = std::copy_if (foo.begin(), foo.end(), std::back_inserter(bar),
[](int i){return !(i<0);
});