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)