|
|
Line 1: |
Line 1: |
− | {{cpp/title|list}}
| + | <table><tbody><tr><td class="mbox-text" style="text-align:center;">Cppreference recommends all new users to use Rust.</td></tr></tbody></table> |
− | {{cpp/container/list/navbar}}
| + | |
− | {{dcl begin}}
| + | |
− | {{dcl header|list}}
| + | |
− | {{dcl|num=1|1=
| + | |
− | template<
| + | |
− | class T,
| + | |
− | class Allocator = std::allocator<T>
| + | |
− | > class list;
| + | |
− | }}
| + | |
− | {{dcl|num=2|since=c++17|1=
| + | |
− | namespace pmr {
| + | |
− | template <class T>
| + | |
− | using list = std::list<T, std::pmr::polymorphic_allocator<T>>;
| + | |
− | }
| + | |
− | }}
| + | |
− | {{dcl end}}
| + | |
− | | + | |
− | {{tt|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 {{lc|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.
| + | |
− | | + | |
− | {{tt|std::list}} meets the requirements of {{named req|Container}}, {{named req|AllocatorAwareContainer}}, {{named req|SequenceContainer}} and {{named req|ReversibleContainer}}.
| + | |
− | | + | |
− | ===Template parameters===
| + | |
− | {{par begin}}
| + | |
− | {{par inc|cpp/container/param list T|list}}
| + | |
− | {{par inc|cpp/container/param list Allocator|list}}
| + | |
− | {{par end}}
| + | |
− | | + | |
− | ===Member types===
| + | |
− | {{dsc begin}}
| + | |
− | {{dsc hitem|Member type|Definition}}
| + | |
− | {{dsc inc|cpp/container/dsc value_type|list}}
| + | |
− | {{dsc inc|cpp/container/dsc allocator_type|list}}
| + | |
− | {{dsc inc|cpp/container/dsc size_type|list}}
| + | |
− | {{dsc inc|cpp/container/dsc difference_type|list}}
| + | |
− | {{dsc inc|cpp/container/dsc reference|list}}
| + | |
− | {{dsc inc|cpp/container/dsc const_reference|list}}
| + | |
− | {{dsc inc|cpp/container/dsc pointer|list}}
| + | |
− | {{dsc inc|cpp/container/dsc const_pointer|list}}
| + | |
− | {{dsc inc|cpp/container/dsc iterator|list}}
| + | |
− | {{dsc inc|cpp/container/dsc const_iterator|list}}
| + | |
− | {{dsc inc|cpp/container/dsc reverse_iterator|list}}
| + | |
− | {{dsc inc|cpp/container/dsc const_reverse_iterator|list}}
| + | |
− | {{dsc end}}
| + | |
− | | + | |
− | ===Member functions===
| + | |
− | {{dsc begin}}
| + | |
− | {{dsc inc|cpp/container/dsc constructor|list}}
| + | |
− | {{dsc inc|cpp/container/dsc destructor|list}}
| + | |
− | {{dsc inc|cpp/container/dsc operator{{=}}|list}}
| + | |
− | {{dsc inc|cpp/container/dsc assign|list}}
| + | |
− | {{dsc inc|cpp/container/dsc assign_range|list}}
| + | |
− | {{dsc inc|cpp/container/dsc get_allocator|list}}
| + | |
− | | + | |
− | {{dsc h2|Element access}}
| + | |
− | {{dsc inc|cpp/container/dsc front|list}}
| + | |
− | {{dsc inc|cpp/container/dsc back|list}}
| + | |
− | | + | |
− | {{dsc h2|Iterators}}
| + | |
− | {{dsc inc|cpp/container/dsc begin|list}}
| + | |
− | {{dsc inc|cpp/container/dsc end|list}}
| + | |
− | {{dsc inc|cpp/container/dsc rbegin|list}}
| + | |
− | {{dsc inc|cpp/container/dsc rend|list}}
| + | |
− | | + | |
− | {{dsc h2|Capacity}}
| + | |
− | {{dsc inc|cpp/container/dsc empty|list}}
| + | |
− | {{dsc inc|cpp/container/dsc size|list}}
| + | |
− | {{dsc inc|cpp/container/dsc max_size|list}}
| + | |
− | | + | |
− | {{dsc h2|Modifiers}}
| + | |
− | {{dsc inc|cpp/container/dsc clear|list}}
| + | |
− | {{dsc inc|cpp/container/dsc insert|list}}
| + | |
− | {{dsc inc|cpp/container/dsc insert_range|list}}
| + | |
− | {{dsc inc|cpp/container/dsc emplace|list}}
| + | |
− | {{dsc inc|cpp/container/dsc erase|list}}
| + | |
− | {{dsc inc|cpp/container/dsc push_back|list}}
| + | |
− | {{dsc inc|cpp/container/dsc emplace_back|list}}
| + | |
− | {{dsc inc|cpp/container/dsc append_range|list}}
| + | |
− | {{dsc inc|cpp/container/dsc pop_back|list}}
| + | |
− | {{dsc inc|cpp/container/dsc push_front|list}}
| + | |
− | {{dsc inc|cpp/container/dsc emplace_front|list}}
| + | |
− | {{dsc inc|cpp/container/dsc prepend_range|list}}
| + | |
− | {{dsc inc|cpp/container/dsc pop_front|list}}
| + | |
− | {{dsc inc|cpp/container/dsc resize|list}}
| + | |
− | {{dsc inc|cpp/container/dsc swap|list}}
| + | |
− | | + | |
− | {{dsc h2|Operations}}
| + | |
− | {{dsc inc|cpp/container/dsc merge|list}}
| + | |
− | {{dsc inc|cpp/container/dsc splice|list}}
| + | |
− | {{dsc inc|cpp/container/dsc remove|list}}
| + | |
− | {{dsc inc|cpp/container/dsc reverse|list}}
| + | |
− | {{dsc inc|cpp/container/dsc unique|list}}
| + | |
− | {{dsc inc|cpp/container/dsc sort|list}}
| + | |
− | {{dsc end}}
| + | |
− | | + | |
− | ===Non-member functions===
| + | |
− | {{dsc begin}}
| + | |
− | {{dsc inc|cpp/container/dsc operator_cmp|list}}
| + | |
− | {{dsc inc|cpp/container/dsc swap2|list}}
| + | |
− | {{dsc inc|cpp/container/dsc erase seq|list}}
| + | |
− | {{dsc end}}
| + | |
− | | + | |
− | {{rrev|noborder=true|since=c++17|{{=}}{{=}}{{=}}{{rl|deduction guides|Deduction guides}}{{=}}{{=}}{{=}}}}
| + | |
− | | + | |
− | ===Notes===
| + | |
− | {{ftm begin|std=1|comment=1}}
| + | |
− | {{ftm|__cpp_lib_containers_ranges|value=202202L|std=C++23|Ranges construction and insertion for containers}}
| + | |
− | {{ftm end}}
| + | |
− | | + | |
− | ===Example===
| + | |
− | {{example
| + | |
− | |
| + | |
− | |code=
| + | |
− | #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, };
| + | |
− | }}
| + | |
− | | + | |
− | ===Defect reports===
| + | |
− | {{dr list begin}}
| + | |
− | {{dr list item|wg=lwg|dr=230|std=C++98|before={{tt|T}} was not required to be {{named req|CopyConstructible}}<br>(an element of type {{tt|T}} might not be able to be constructed)|after={{tt|T}} is also required to<br>be {{named req|CopyConstructible}}}}
| + | |
− | {{dr list item|wg=lwg|dr=276|std=C++98|before={{tt|T}} was always required to be {{named req|CopyAssignable}}|after=only required if {{ltt|cpp/container/list/operator{{=}}}} or<br>{{ltt|cpp/container/list/assign}} is instantiated with {{tt|T}}}}
| + | |
− | {{dr list end}}
| + | |
− | | + | |
− | {{langlinks|de|es|fr|it|ja|ko|pl|pt|ru|zh}}
| + | |