C++ 是否有从容器转换的标准方法<;类型1>;到集装箱<;类型2>;?

C++ 是否有从容器转换的标准方法<;类型1>;到集装箱<;类型2>;?,c++,list,containers,C++,List,Containers,我有两个类A和B,并且存在一个隐式转换运算符来从一个类转换到另一个类,因此: A a; B b; b = a; // Works 是否有标准方法将std::list转换为std::list?(甚至从std::vector到std::list) 我知道我可以迭代列表并逐项构建第二个列表,但我想知道是否有更优雅的解决方案 不幸的是,我不能使用boost但是出于好奇,如果boost能够处理这个问题,我也很乐意知道如何处理。好的,是的。每个序列容器类型都有一个模板构造函数,它接受一对迭代器(迭代器范围

我有两个类
A
B
,并且存在一个隐式转换运算符来从一个类转换到另一个类,因此:

A a;
B b;
b = a; // Works
是否有标准方法将
std::list
转换为
std::list
?(甚至从
std::vector
std::list

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


不幸的是,我不能使用
boost
但是出于好奇,如果boost能够处理这个问题,我也很乐意知道如何处理。

好的,是的。每个序列容器类型都有一个模板构造函数,它接受一对迭代器(迭代器范围)作为输入。只要序列元素类型可相互转换,它可用于从一个序列构造另一个序列,而不考虑序列类型。比如说

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

我想这一定是以前问过的,但我找不到。我不敢相信事情会这么简单。我不敢相信我竟然没有想到。非常感谢;)如果一个类型不能转换为B类型,那么行为应该是什么?这取决于您正在做什么,以及列表的所有者,std::copy可能也值得一看,可能需要一个插入器iterator@bjskishore123:它将无法编译。诊断信息的位置、方式和内容取决于实现。+1:简单就是优雅。请注意,迭代器的范围也可以用于
insert
(关于这里提到的唯一一件事)。
std::vector<A> v;
std::list<B> l;
...
l.assign(v.begin(), v.end()); // replaces the contents of `l`