Open In App

List in C++ Standard Template Library (STL)

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Lists are sequence containers that allow non-contiguous memory allocation. As compared to the vector, the list has slow traversal, but once a position has been found, insertion and deletion are quick (constant time). Normally, when we say a List, we talk about a doubly linked list. For implementing a singly linked list, we use a forward_list.

std::list is the class of the List container. It is the part of C++ Standard Template Library (STL) and is defined inside <list> header file.

Syntax:

std::list <data-type> name_of_list;

Example:

C++




// C++ program to demonstrate the use of list containers
#include <iostream>
#include <list>
using namespace std;
 
int main()
{
    // defining list
    list<int> gqlist{12,45,8,6};
 
    for (auto i : gqlist) {
        cout << i << ' ';
    }
    return 0;
}


Output

12 45 8 6 

In the above example, we created a std::list object named gqlist and initialized it using an initializer_list. We can initialize the std::list objects using many different ways mentioned here.

Some Basic Operations on std::list

  • front() Returns the value of the first element in the list.
  • back() Returns the value of the last element in the list.
  • push_front() Adds a new element ‘g’ at the beginning of the list.
  • push_back() Adds a new element ‘g’ at the end of the list.
  • pop_front() Removes the first element of the list, and reduces the size of the list by 1.
  • pop_back() Removes the last element of the list, and reduces the size of the list by 1.
  • insert() Inserts new elements in the list before the element at a specified position.
  • size() Returns the number of elements in the list.
  • begin() begin() function returns an iterator pointing to the first element of the list.
  • end() end() function returns an iterator pointing to the theoretical last element which follows the last element.

The below example demonstrates the general use of list containers and their basic functions in C++.

Example:

C++




// C++ program to demonstrate the implementation of List
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
 
// function for printing the elements in a list
void showlist(list<int> g)
{
    list<int>::iterator it;
    for (it = g.begin(); it != g.end(); ++it)
        cout << '\t' << *it;
    cout << '\n';
}
 
// Driver Code
int main()
{
 
    list<int> gqlist1, gqlist2;
 
    for (int i = 0; i < 10; ++i) {
        gqlist1.push_back(i * 2);
        gqlist2.push_front(i * 3);
    }
    cout << "\nList 1 (gqlist1) is : ";
    showlist(gqlist1);
 
    cout << "\nList 2 (gqlist2) is : ";
    showlist(gqlist2);
 
    cout << "\ngqlist1.front() : " << gqlist1.front();
    cout << "\ngqlist1.back() : " << gqlist1.back();
 
    cout << "\ngqlist1.pop_front() : ";
    gqlist1.pop_front();
    showlist(gqlist1);
 
    cout << "\ngqlist2.pop_back() : ";
    gqlist2.pop_back();
    showlist(gqlist2);
 
    cout << "\ngqlist1.reverse() : ";
    gqlist1.reverse();
    showlist(gqlist1);
 
    cout << "\ngqlist2.sort(): ";
    gqlist2.sort();
    showlist(gqlist2);
 
    return 0;
}


Output

List 1 (gqlist1) is :     0    2    4    6    8    10    12    14    16    18

List 2 (gqlist2) is :     27    24    21    18    15    12    9    6    3    0

gqlist1.front() : 0
gqlist1.back() : 18
gqlist1.pop_front() :     2    4    6    8    10    12    14    16    18

gqlist2.pop_back() :     27    24    21    18    15    12    9    6    3

gqlist1.reverse() :     18    16    14    12    10    8    6    4    2

gqlist2.sort():     3    6    9    12    15    18    21    24    27

The above example only demonstrates the general usage of the std::list and its member functions. The below table provides all the member functions of std::list class and links to their detailed explanation.

std::list Member Functions

Functions

Definition

front() Returns the value of the first element in the list.
back() Returns the value of the last element in the list.
push_front(g) Adds a new element ‘g’ at the beginning of the list.
push_back(g)  Adds a new element ‘g’ at the end of the list.
pop_front() Removes the first element of the list, and reduces the size of the list by 1.
pop_back() Removes the last element of the list, and reduces the size of the list by 1.
list::begin() begin() function returns an iterator pointing to the first element of the list.
list::end() end() function returns an iterator pointing to the theoretical last element which follows the last element.
list rbegin() and rend() rbegin() returns a reverse iterator which points to the last element of the list. rend() returns a reverse iterator that points to the position before the beginning of the list.
list cbegin() and cend()   cbegin() returns a constant random access iterator which points to the beginning of the list. cend() returns a constant random access iterator which points to the end of the list.
list crbegin() and crend()  crbegin() returns a constant reverse iterator which points to the last element of the list i.e reversed beginning of the container. crend() returns a constant reverse iterator which points to the theoretical element preceding the first element in the list i.e. the reverse end of the list.
empty()  Returns whether the list is empty(1) or not(0).
insert() Inserts new elements in the list before the element at a specified position.
erase() Removes a single element or a range of elements from the list.
assign() Assigns new elements to the list by replacing current elements and resizing the list.
remove() Removes all the elements from the list, which are equal to a given element.
list::remove_if() Used to remove all the values from the list that correspond true to the predicate or condition given as a parameter to the function.
reverse() Reverses the list.
size() Returns the number of elements in the list.
list resize() Used to resize a list container.
sort() Sorts the list in increasing order.
list max_size()  Returns the maximum number of elements a list container can hold.
list unique() Removes all duplicate consecutive elements from the list.
list::emplace_front() and list::emplace_back() .emplace_front() function is used to insert a new element into the list container and constructs the object in-place at the beginning of the list.
. emplace_back() function is used to insert a new element into the list container,and constructs the object in-place at the end of the list.
list::clear() clear() function is used to remove all the elements of the list container, thus making it size 0.
list::operator= This operator is used to assign new contents to the container by replacing the existing contents.
list::swap() This function is used to swap the contents of one list with another list.
list splice() Used to transfer elements from one list to another.
list merge() Merges two sorted lists into one.
list emplace() Extends the list by inserting a new element at a given position and it constructs the object in-place at the beginning of the list, potentially improving performance by avoiding a copy operation

Points to Remember about List Container 

  • It is generally implemented using a dynamic doubly linked list with traversal in both directions.
  • Faster insert and delete operation as compared to arrays and vectors.
  • It provides only sequential access. Random Access to any middle element is not possible
  • It is defined as a template so it is able to hold any data type.
  • It operates as an unsorted list would, which implies that by default, the list’s order is not preserved. However, there are techniques for sorting.


Last Updated : 28 Feb, 2024
Like Article
Save Article
Share your thoughts in the comments
Similar Reads