In this article we will discuss std::list usage details.

What is std::list ?

std::list is sequential STL container that is internally implemented as doubly linked list.
i.e. every element in the list is stored at a seperate memory location i.e. called node and it also contains a pointer to the previous and next node.

Creating a std::list of int and pushing elements in front and back

List Contents are now,
1 2 5 6

Inserting elements in the std::list

std::list has several overloaded member function insert() to insert the elements in between the list. One is,

It allocates a new node and copy the passed element to it and then inserts that node before iterator position iterator_position and returns the position of the newly added element.

It has several other overloaded implementations i.e.

etc.

Now lets insert an element at 3rd position in the list.

Now List contents will be,
1 2 4 5 6

Iterating over a std::list of elements and display them

Erasing elements from std::list

std::list has two overloaded member function erase() to erase the elements in between the list. These are,

It erases the element at the passed node and chane the left and right pointers of previous and next nodes. Also returns iterator of next node element. This opeartion takes O(1) time, as only swapping of pointers is required not like vector and deque, where other elements need to be shifted.

It has an other overloaded implementations i.e.

It erases the elements in given range.

Now lets erase an element at 3rd position in the list.

Now List contents will be,
1 2 5 6

Removing elements from a std::list based on some condition

::remove(value) member function of std::list removes all the elements whose value is equivalent to passed value.
::remove_if(predicate) member function of std::list removes all the elements for which predicate(element) returns true.

Lets remove all elements with value greater than 3.

Now List contents will be,
1 2

Complete executable code is as follows,


#include <iostream>
#include <list>
#include <iterator>


int main()
{
	std::list<int> listOfNumbers;

	//Inserting elements at end in list
	listOfNumbers.push_back(5);
	listOfNumbers.push_back(6);

	//Inserting elements at front in list
	listOfNumbers.push_front(2);
	listOfNumbers.push_front(1);

	// Iterating over list elements and display them
	std::list<int>::iterator it = listOfNumbers.begin();
	while(it != listOfNumbers.end())
	{
		std::cout<<(*it)<<"  ";
		it++;
	}
	std::cout<<std::endl;


	//Inserting elements in between the list using
	// insert(pos,elem) member function. Let's iterate to
	// 3rd position
	it = listOfNumbers.begin();
	it++;
	it++;
	// Iterator 'it' is at 3rd position.
	listOfNumbers.insert(it, 4);


	// Iterating over list elements and display them
	it = listOfNumbers.begin();
	while(it != listOfNumbers.end())
	{
		std::cout<<(*it)<<"  ";
		it++;
	}
	std::cout<<std::endl;


	//Erasing elements in between the list using
	// erase(position) member function. Let's iterate to
	// 3rd position
	it = listOfNumbers.begin();
	it++;
	it++;
	// Iterator 'it' is at 3rd position. Now erase this element.
	listOfNumbers.erase(it);


	// Iterating over list elements and display them
	it = listOfNumbers.begin();
	while(it != listOfNumbers.end())
	{
		std::cout<<(*it)<<"  ";
		it++;
	}
	std::cout<<std::endl; //Lets remove all elements with value greater than 3. listOfNumbers.remove_if([](int elem) { if(elem > 3)
					return true;
				else
					return false;
			});

	it = listOfNumbers.begin();
	while(it != listOfNumbers.end())
	{
		std::cout<<(*it)<<"  ";
		it++;
	}
	std::cout<<std::endl;

	return 0;
}