通过构造函数转换容器

时间:2013-09-27 19:58:34

标签: c++ stl

假设我有课程

class A {
   //...
};

struct B {
   explicit B(const A&);
   //...
};

我有一个A的容器,我想从中建造一个容器的B&#39。在c ++ 03中执行此操作的惯用方法是什么?

尝试并失败:

std::vector<A> source = fillSourceObjects();
std::vector<B> target;

// 1) won't compile; presumably I need a static helper function, 
//    but I would like to avoid that
std::transform(source.begin(), source.end(), std::back_inserter(target), B);
std::transform(source.begin(), source.end(), std::back_inserter(target), B::B);

// 2) won't compile; "... error: no match for 'operator=' in '* __result = *__first'
std::copy(source.begin(), source.end(), target.begin());

1 个答案:

答案 0 :(得分:3)

您可以使用A构造函数将B s序列转换为std::vector<T> s序列,并采用序列:

std::vector<B> target(source.begin(), source.end());