c++stl

One liner to convert from list<T> to vector<T>


Is there an one-liner that converts a list<T> to vector<T>?

A google search returns me a lot of results that use manual, lengthy conversion, which make me puke. Should we go to that much trouble to do something as simple as a list-to-vector conversion?


Solution

  • You can only create a new vector with all the elements from the list:

    std::vector<T> v{ std::begin(l), std::end(l) };
    

    where l is a std::list<T>. This will copy all elements from the list to the vector.

    Since C++11 this can be made more efficient if you don't need the original list anymore. Instead of copying, you can move all elements into the vector:

    std::vector<T> v{ std::make_move_iterator(std::begin(l)), 
                      std::make_move_iterator(std::end(l)) };