are they adding copy_if to c++0x?

后端 未结 3 1021
一整个雨季
一整个雨季 2021-01-02 18:27

It\'s very annoying that copy_if is not in C++. Does anyone know if it will be in C++0x?

相关标签:
3条回答
  • 2021-01-02 18:56

    In the meantime, it's not very hard to make your own 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()));
    

    Using not1() requires your predicate class to supply a nested type, argument_type, identifying the type of the argument -- as shown above, one convenient way to do this is to derive from unary_function<T, U>, where T is the argument type.

    0 讨论(0)
  • 2021-01-02 18:59

    Since the C++0x is not yet finalized, you can only take a look at the most recent draft.

    0 讨论(0)
  • 2021-01-02 19:09

    Just for completeness, in case someone googles his/her way to this question, it should be mentioned that now (in C++11 and later) there is a copy if algorithm. It behaves as expected (copies the elements in a range, for which some predicate returns true, to another range).

    A typical use case would be

    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);
              });
    
    0 讨论(0)
提交回复
热议问题