2009-04-27 5 views

答えて

7

C++ 0xはまだファイナライズされていないため、最新のdraftしか見ることができません。一方

+2

スウィートRAPTORイエス:-)誤って本規格のうち残っていた、そこです。 – rlbond

+1

これまでのところ、C++ 0xはかなり上手くファイナライズされています。最新のドラフトは、最終バージョンのものに近いです。 –

+0

私は同意します、私はちょうどgcc 4.4が既にドラフトのためのいくつかのサポートを持っていることを読んでいた。 –

5

、それはremove_copy_if()を使用して、独自のcopy_if()を作ることは非常に難しいことではありません:not1()を使用して

#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())); 

は、引数の型を識別し、ネストされたタイプ、argument_typeを供給するために、あなたの述語クラスが必要です - として、これを行う便利な方法の1つは、unary_function<T, U>から派生させることです。ここで、Tは引数型です。

4

ただ、完全を期すために、誰かがこの質問への彼/彼女の方法をグーグル場合には、今copy ifアルゴリズムがある(C++ 11以降で)ことに言及しなければなりません。期待どおりに動作します(ある述語が真を返す範囲の要素を別の範囲にコピーします)。

典型的な使用ケースは

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); 
      }); 
関連する問題