In this article we will discuss the different ways to initialize a std::list in C++.
std::list provides various overloaded constructors for creation and initialization of list. Let’s see different ways to create & initialize a std::list in C++ i.e.
std::list has a default constructor that will create an empty list i.e.
explicit list (const allocator_type& alloc = allocator_type());
// Create an empty list of ints std::list<int> listOfInts;
Let’s see an example to create an empty list and the push elements in it i.e
#include <iostream> #include <list> int main() { // Create an empty list of ints std::list<int> listOfInts; // Push back 10 elements in the list for (int i = 0; i < 10; i++) listOfInts.push_back(i); // Iterate over the list and display numbers for (int val : listOfInts) std::cout << val << ","; std::cout << std::endl; return 0; }
Output:
0,1,2,3,4,5,6,7,8,9
As above example contains c++11 range based for loop, so to compile the above example use following command,
g++ --std=c++11 example1.cpp
In this example we will create a List using its Fill Constructor i.e.
list (size_type n, const value_type& val,const allocator_type& alloc = allocator_type());
std::list<int> listOfInts(5, 119);
It will create a list with 5 elements and each is initialized with a copy of element passed as second argument i.e. 119 in our case.
Example of initializing a list with Fill Constructor is as follows,
#include <iostream> #include <list> int main() { // Create a list and initialize it with 5 elements of value 119 std::list<int> listOfInts(5, 119); // Iterate over the list and display numbers for (int val : listOfInts) std::cout << val << ","; std::cout << std::endl; return 0; }
Output:
119,119,119,119,119,
As above example contains c++11 range based for loop, so to compile the above example use following command,
g++ --std=c++11 example2.cpp
In C++11 new overloaded constructor of std::list is introduced that can receive an initializer_list as argument and can initialize list elements with a copy of elements in initializer_list i.e.
list (initializer_list<value_type> il,const allocator_type& alloc = allocator_type());
std::list<int> listOfInts({2,8,7,5,3,1,4});
[showads ad=inside_post]
Lets see an example to initialize a std::list with an initialzer_list i.e.
#include <iostream> #include <list> #include <list> int main() { // Create a list and initialize it initializer_list of 7 elements std::list<int> listOfInts( { 2, 8, 7, 5, 3, 1, 4 }); // Iterate over the list and display numbers for (int val : listOfInts) std::cout << val << ","; std::cout << std::endl; // Create a initializer list of strings std::initializer_list<std::string> initLits = { "Hi", "this", "is", "sample" }; // Create & Initialize a list with initializer_list object std::list<std::string> listOfStrs(initLits); // Iterate over the list and display strings for (std::string data : listOfStrs) std::cout << data << std::endl; return 0; }
Output:
2,8,7,5,3,1,4, Hi this is sample
As above example contains c++11 range based for loop, so to compile the above example use following command,
g++ --std=c++11 example3.cpp
std::list provides an over loaded version of constructor that accepts a range i.e.
list (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
Let’s use this to initialize a std::list with a Vector i.e.
#include <iostream> #include <list> #include <vector> int main() { std::vector<int> vecOfInt( { 2, 8, 7, 5, 3, 1, 4 }); // Create a list and initialize it with vector std::list<int> listOfInts(vecOfInt.begin(), vecOfInt.end()); // Iterate over the list and display numbers for (int val : listOfInts) std::cout << val << ","; std::cout << std::endl; return 0; }
Initializing a std::list from an array using above mentioned constructor,
#include <iostream> #include <list> #include <vector> int main() { int arr[] = { 2, 8, 7, 5, 3, 1, 4 }; // Create a list and initialize it with vector std::list<int> listOfInts(arr, arr + sizeof(arr) / sizeof(int)); // Iterate over the list and display numbers for (int val : listOfInts) std::cout << val << ","; std::cout << std::endl; return 0; }
Output of above 2 Examples:
2,8,7,5,3,1,4,
As above example contains c++11 range based for loop, so to compile the above example use following command,
g++ --std=c++11 example4.cpp