Is there an easy way to insert an entire list to the end of a vector without inserting the front value and popping it for the entire list? Right now, I'm doing thing:
std::vector<int> v({1,2,3});
std::list<int> l({5,7,9});
for (int i=0; i<3; i++) {
v.push_back(l.front());
l.pop_front();
}
I'm hoping for some way to easily just iterate through the list and insert it into the vector.
You need to insert at the end of v. Both vector and list have iterators so its pretty straight forward.
You can replace your for loop with this single line:
v.insert(v.end(), l.begin(), l.end());
Here is the updated code:
#include <iostream>
#include <vector>
#include <list>
int main() {
std::cout << "Hello, World!\n";
std::vector<int> v({1,2,3});
std::list<int> l({5,7,9});
v.insert(v.end(), l.begin(), l.end());
l.clear();
for (int i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
output:
Hello, World!
1 2 3 5 7 9
Program ended with exit code: 0
While the question illustrated int element types, that might have been a simplification while preparing an example, or other readers might find this Q&A when wanting to move non-copyable elements from the list, or types likes std::string that can often1 be moved faster than copied. To move elements, use:
v.insert(v.end(),
std::move_iterator{l.begin()}, std::move_iterator{l.end()});
l.clear();
1 in string's case - when longer than any internal Short-String-Optimisation buffer and therefore using dynamically allocated memory
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