我有两个类A
和B
,并且存在一个隐式转换运算符,从一个到另一个,所以:
A a;
B b;
b = a; // Works
是否有将std::list<A>
转换为std::list<B>
的标准方法? (甚至从std::vector<A>
到std::list<B>
)。
我知道我可以迭代到列表并逐项构建第二个列表,但我想知道是否有更优雅的解决方案。
不幸的是我不能使用boost
,但出于好奇心作为奖励问题,如果提升可以解决这个问题,我也很乐意知道这一点。
答案 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`