ZetCode

C++ list

last modified September 7, 2022

In this article we show how to work with a list container in C++.

A list is a container which holds a sequence of elements. The elements have a specific type. A list allows efficient insertions and deletions at any location within the sequence.

A list does not have a random access operator; that is, it is not possible to get a value from a list via an index operator []. (Vectors can be used for random access of elements.)

C++ list size

The size of a list is determined with size.

main.cpp
#include <iostream>
#include <list>

using std::cout;
using std::list;

int main()
{
    list<int> vals({1, 2, 3, 4, 5, 6, 7});
    cout << "The list has " << vals.size() << " elements\n";
}

We initialize a list of integers and print its size.

list<int> vals({1, 2, 3, 4, 5, 6, 7});

We create a list of integer values with a list initializer. The type of the list is specified between <> brackets.

cout << "The list has " << vals.size() << " elements\n";

We print a message that says how many elements are in the list.

$ ./main
The list has 7 elements

C++ map insert elements

The following example inserts new values.

main.cpp
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;
using std::string;

int main()
{
    list<string> words = {"sky", "car", "cup", "ocean", "war"};

    list<string>::iterator it = words.begin();
    words.insert(it, "falcon");

    words.push_back("world");
    words.push_front("water");

    for (auto word : words)
    {
        cout << word << endl;
    }
}

We have a list of words.

list<string>::iterator it = words.begin();
words.insert(it, "falcon");

We create an iterator which points to the beginning of a list. We insert a new element there.

words.push_back("world");
words.push_front("water");

We add a new element at the back with push_back and at the start with push_front.

$ ./main
water
falcon
sky
car
cup
ocean
war
world

C++ list remove elements

The following example removes list elements.

main.cpp
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;
using std::string;

int main()
{
    list<string> words = {"sky", "car", "cup", "ocean", "war"};

    words.remove("war");

    for (auto word : words)
    {
        cout << word << endl;
    }

    words.clear();

    cout << words.size() << endl;
}

We remove elements with remove and clear.

words.remove("war");

We remove the specified element with remove.

words.clear();

All elements are removed with clear.

$ ./main
sky
car
cup
ocean
0

C++ loop list

The following example loops over a list.

classic_for.cpp
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;

int main()
{
    list<int> vals = {1, 2, 3, 4, 5, 6, 7};

    for (auto it = vals.cbegin(); it != vals.cend(); ++it)
    {
        std::cout << *it << endl;
    }

    for (auto val : vals)
    {
        cout << val << endl;
    }
}

We loop over a list of integers with a class for loop and a foreach loop.

for (auto it = vals.cbegin(); it != vals.cend(); ++it)
{
    std::cout << *it << endl;
}

The list is iterated with a classic for loop. The cbegin returns a constant iterator pointing to the first element in the container. The cend returns constant iterator pointing to the past-the-end element in the container.

for (auto val : vals)
{
    cout << val << endl;
}

A foreach loop is an easy syntax for looping over containers.

$ ./main
1
2
3
4
5
6
7
1
2
3
4
5
6
7

C++ list remove_if

The remove_if function removes all elements that satisfy the given predicate.

main.cpp
#include <iostream>
#include <string>
#include <list>

using std::cout;
using std::endl;
using std::list;
using std::string;

int main()
{
    list<string> words = {"sky", "car", "cup", "ocean", "war"};

    words.remove_if([](const string& e) {
        return (e.starts_with("w"));
    });

    for (auto word : words)
    {
        cout << word << endl;
    }
}

In the example, we remove all words from the list that start with "w".

$ clang++ main.cpp -o main -std=c++20
$ ./main
sky
car
cup
ocean

In this article, we have worked with the list container in C++.