kal
kal

Reputation: 29361

Best way to copy a vector to a list in STL?

Is iterating through the vector using an iterator and copying to a list the most optimal method of copying. Any recommendations?

Upvotes: 46

Views: 42620

Answers (5)

Kasprzol
Kasprzol

Reputation: 4159

Why would you iterate and not use the standard copy algorithm?

std::copy( vector.begin(), vector.end(), std::back_inserter( list ) );

Since C++20 std::ranges::copy makes it even easier

std::ranges::copy(vector, std::back_inserter( list ) );

Upvotes: 93

Dennis
Dennis

Reputation: 59499

list.assign(vector.begin(), vector.end());

Upvotes: 10

nobar
nobar

Reputation:

I like this suggestion for constructing a new list.

std::list<SomeType> myList(v.begin(), v.end());

But when appending to an existing list, the following may be optimal for small data sets. By "optimal", I mean that it is easiest to remember how to do and easiest to understand. (These are subjective statements, I'm sure it depends on how your brain is wired.)

for ( unsigned i=0; i<v.size(); i++ ) myList.push_back(v[i]);

Using iterators on vectors may be overly pedantic in many cases. Simple indexing usually works fine.

Another thread addresses iterators vs. indices (here). In that thread, the taken answer basically preferred iterators because they are more generic. But if vectors are the most commonly used container type, I think it is reasonable to specialize this kind of simple algorithm.

Upvotes: 3

Fred Larson
Fred Larson

Reputation: 62063

If you're making a new list, you can take advantage of a constructor that takes begin and end iterators:

std::list<SomeType> myList(v.begin(), v.end());

Kasprzol's answer is perfect if you have an existing list you want to append to.

Upvotes: 72

ChrisW
ChrisW

Reputation: 56113

You can try to use trickier things from the <algorithm> header, for example for_each or copy ... but they would amount to the same thing, in my opinion.

Upvotes: 0

Related Questions