Open In App

List in C++ Standard Template Library (STL)

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++ 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

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

Example:




// 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 


Article Tags :
C++