我有两个类A
和B
,并且存在一个隐式转换运算符从一个类转换到另一个类,因此:
A a;
B b;
b = a; // Works
有没有标准的方法将
std::list<A>
转换为std::list<B>
?(甚至从std::vector<A>
到std::list<B>
也可以)。我知道可以遍历列表并逐个构建第二个列表,但我想知道是否有更优雅的解决方案。
不幸的是我不能使用
boost
,但作为一个额外的问题,如果boost可以处理这个问题,我很乐意了解如何处理。我有两个类A
和B
,并且存在一个隐式转换运算符从一个类转换到另一个类,因此:
A a;
B b;
b = a; // Works
std::list<A>
转换为std::list<B>
?(甚至从std::vector<A>
到std::list<B>
也可以)。boost
,但作为一个额外的问题,如果boost可以处理这个问题,我很乐意了解如何处理。是的,每种序列容器类型都有一个模板构造函数,它接受一个迭代器对(一个迭代器范围)作为输入。它可以用来从另一个序列构造一个序列,无论序列类型如何,只要序列元素类型可以相互转换。例如:
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`
insert
一起使用(这是唯一没有提到的事情)。 - Matthieu M.