std::list
<list>
class T,
class Allocator = std::allocator <T>
template< class T >
using list = std::list<T, std::pmr::polymorphic_allocator <T>>;
std::list
is a container that supports constant time insertion and removal of elements from anywhere in the container. Fast random access is not supported. It is usually implemented as a doubly-linked list. Compared to std::forward_list this container provides bidirectional iteration capability while being less space efficient.
Adding, removing and moving the elements within the list or across several lists does not invalidate the iterators or references. An iterator is invalidated only when the corresponding element is deleted.
std::list
meets the requirements of Container, AllocatorAwareContainer, SequenceContainer and ReversibleContainer.
std::list
are constexpr: it is possible to create and use std::list
objects in the evaluation of a constant expression.However, std::list
objects generally cannot be constexpr, because any dynamically allocated storage must be released in the same evaluation of constant expression.
Contents
[edit] Template parameters
T | - | The type of the elements.
| ||||||||||||||
Allocator | - | An allocator that is used to acquire/release memory and to construct/destroy the elements in that memory. The type must meet the requirements of Allocator. The behavior is undefined(until C++20)The program is ill-formed(since C++20) if Allocator::value_type is not the same as T .[edit]
|
[edit] Member types
pointer
Allocator::pointer
std::allocator_traits <Allocator>::pointer
(since C++11)const_pointer
Allocator::const_pointer
std::allocator_traits <Allocator>::const_pointer
(since C++11)iterator
value_type
[edit]
const_iterator
reverse_iterator
const_reverse_iterator
[edit] Member functions
Element access
Iterators
Capacity
Modifiers
Operations
[edit] Non-member functions
list
s (function template) [edit]
Deduction guides
(since C++17)[edit] Notes
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Ranges construction and insertion for containers |
__cpp_lib_constexpr_list |
202502L |
(C++26) | constexpr std::list
|
[edit] Example
#include <algorithm> #include <iostream> #include <list> int main() { // Create a list containing integers std::list<int> l = {7, 5, 16, 8}; // Add an integer to the front of the list l.push_front(25); // Add an integer to the back of the list l.push_back(13); // Insert an integer before 16 by searching auto it = std::find (l.begin(), l.end(), 16); if (it != l.end()) l.insert(it, 42); // Print out the list std::cout << "l = { "; for (int n : l) std::cout << n << ", "; std::cout << "};\n"; }
Output:
l = { 25, 7, 5, 42, 16, 8, 13, };
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 230 | C++98 | T was not required to be CopyConstructible (an element of type T might not be able to be constructed)
|
T is also required tobe CopyConstructible |
LWG 276 | C++98 | T was always required to be CopyAssignable
|
only required if operator= or assign is instantiated with T
|