7

copy_if不在 C++ 中很烦人。有谁知道它是否会在 C++0x 中?

4

3 回答 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 回答