0

ねえ、私はオブジェクトへのポインタのベクトルを別のオブジェクトへのポインタの別のベクトルに変換しようとしています。

私は次のクラスを受講しました。

class Test;
class Test2 {
    public:
        Test2(Test*);
}

ファンクターの作り方がよくわかりません。これは今週後半の試験のサンプル試験の一部ですが、私はこの質問で混乱しています。次のリンクは、変換の使用法を非常によく説明していますが、私の問題は少し異なります。どんな助けでも素晴らしいでしょう!

参照:http ://www.cplusplus.com/reference/algorithm/transform/

4

2 に答える 2

2

ファンクターは、オーバーロードするファンクターですoperator()。したがって、ファンクターを次のように定義できます。

struct Test2Generator
{
     //this will be called from std::transform
     Test2* operator()(Test1 *param) const
     {
          return new Test2(param);
     }
};

次に、次のように使用します。

std::vector<Test1*> v1;
//fill v1

std::vector<Test2*> v2(v1.size());

std::transform(v1.begin(), v1.end(), v2.begin(), Test2Generator());

C ++ 11では、ファンクターを定義する必要はありません。代わりに、ラムダを次のように使用できます。

std::transform(v1.begin(), 
               v1.end(), 
               v2.begin(), 
               [](Test1 *param) { return new Test2(param); });
于 2012-06-04T15:45:12.390 に答える
2

変換の呼び出しは、次のようになります。

std::vector<Test*> src = ...
std::vector<Test2*> dst;
dst.reserve( src.size() );
std::transform( src.begin(), src.end(), std::back_inserter(dst), MyFunctor() );

MyFunctor()を実装する関数オブジェクトはどこにありますかTest2* operator()( Test* )

struct MyFunctor {
   Test2* operator()( Test* ) const {
      // implementation goes here
   }
};
于 2012-06-04T15:45:47.627 に答える