C++指针的变换向量

C++ transform vector of pointers

本文关键字:向量 变换 指针 C++      更新时间:2023-10-16

嘿,我正在尝试将指向对象的指针向量转换为指向不同对象的指针向量。

我被安排了以下课程:

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

我不熟悉如何创建函子。 这是本周晚些时候考试样本考试的一部分 不过我对这个问题感到困惑。以下链接很好地解释了转换的使用,但我的问题有点不同。任何帮助都会很棒!

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

子是重载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 中,您不需要定义函子,而是可以使用 lambda 作为:

std::transform(v1.begin(), 
               v1.end(), 
               v2.begin(), 
               [](Test1 *param) { return new Test2(param); });

对转换的调用将类似于:

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
   }
};