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++
#include <iostream>
#include <list>
using namespace std;
int main()
{
list< int > gqlist{12,45,8,6};
for ( auto i : gqlist) {
cout << i << ' ' ;
}
return 0;
}
|
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++
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
void showlist(list< int > g)
{
list< int >::iterator it;
for (it = g.begin(); it != g.end(); ++it)
cout << '\t' << *it;
cout << '\n' ;
}
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
Please Login to comment...