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.
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`
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With