copy_if
不在 C++ 中很烦人。有谁知道它是否会在 C++0x 中?
问问题
1512 次
3 回答
7
由于 C++0x 还没有定稿,所以只能看看最新的草稿。
于 2009-04-27T16:55:10.050 回答
5
与此同时,自己制作copy_if()
using并不难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()));
Usingnot1()
需要你的谓词类提供一个嵌套类型,argument_type
,标识参数的类型——如上所示,一种方便的方法是派生自unary_function<T, U>
,T
参数类型在哪里。
于 2009-04-28T10:24:29.340 回答
4
为了完整起见,如果有人用他/她的方式搜索这个问题,应该提到现在(在 C++11 及更高版本中)有一个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);
});
于 2014-05-10T09:36:46.387 回答