Is there a standard way to convert from container<Type1> to container<Type2>?

自古美人都是妖i 提交于 2019-12-05 21:09:40

问题


I have two classes A and B, and an implicit conversion operator exists to go from one to the other, so that:

A a;
B b;
b = a; // Works

Is there a standard way to convert a std::list<A> to a std::list<B> ? (Or even from std::vector<A> to a std::list<B>).

I know I can iterate trough to the list and build the second list item by item, but I wonder if there is a more elegant solution.

Unfortunately I cannot use boost but out of curiosity as a bonus question, if boost can handle this, I'd be happy to know how too.


回答1:


Well, yes. Each sequence container type has a template constructor that takes a pair of iterators (an iterator range) as an input. It can be used to construct one sequence from another, regardless of the sequence types, as long as the sequence element types are convertible to each other. Like for example

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

Also sequence containers have assign member function which does the same thing with assignment semantics (as opposed to initialization semantics).

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


来源:https://stackoverflow.com/questions/3607658/is-there-a-standard-way-to-convert-from-containertype1-to-containertype2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!