是否有从容器<Type1>转换为容器<Type2>的标准方法?

ere*_*eOn 8 c++ containers list

我有两个班A,并B和隐式转换操作符存在从一个到另一个去,使:

A a;
B b;
b = a; // Works
Run Code Online (Sandbox Code Playgroud)

有没有标准的方法将a转换std::list<A>std::list<B>?(甚至从std::vector<A>a到std::list<B>).

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

不幸的是我不能使用,boost但出于好奇心作为奖励问题,如果提升可以处理这个,我很高兴知道如何.

AnT*_*AnT 15

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

std::vector<A> v;
...
std::list<B> l(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)

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

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

  • @ bjskishore123:它将无法编译.何处,如何以及使用什么诊断消息 - 取决于实施. (3认同)