是否有从容器<type1>转换为容器<type2>的标准方法?</type2> </type1>

时间:2010-08-31 09:21:03

标签: c++ list containers

我有两个类AB,并且存在一个隐式转换运算符,从一个到另一个,所以:

A a;
B b;
b = a; // Works

是否有将std::list<A>转换为std::list<B>的标准方法? (甚至从std::vector<A>std::list<B>)。

我知道我可以迭代到列表并逐项构建第二个列表,但我想知道是否有更优雅的解决方案。

不幸的是我不能使用boost ,但出于好奇心作为奖励问题,如果提升可以解决这个问题,我也很乐意知道这一点。

1 个答案:

答案 0 :(得分:15)

嗯,是的。每个序列容器类型都有一个模板构造函数,它将一对迭代器(迭代器范围)作为输入。只要序列元素类型可以相互转换,它就可以用于从另一个序列构建一个序列,而不管序列类型如何。例如

std::vector<A> v;
...
std::list<B> l(v.begin(), v.end());

序列容器也有assign成员函数,它与赋值语义相同(与初始化语义相反)。

std::vector<A> v;
std::list<B> l;
...
l.assign(v.begin(), v.end()); // replaces the contents of `l`