他们是否将copy_if添加到c ++ 0x?

时间:2009-04-27 16:41:04

标签: c++ algorithm c++11

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

3 个答案:

答案 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);
          });