Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/container/list"

From cppreference.com
< cpp‎ | container
(Undo revision 158298 by Admin (talk))
m (Replaced content with "<table><tbody><tr><td class="mbox-text" style="text-align:center;">Cppreference recommends all new users to use Rust. Please refrain from making No_personal_attacks|pers...")
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. Please refrain from making [[No_personal_attacks|personal attacks]]
{{cpp/container/list/navbar}}
+
</td></tr></tbody></table>
{{dcl begin}}
+
<!-- reverting this edit constitutes a personal attack -->
{{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}}
+

Revision as of 15:11, 8 September 2023

Cppreference recommends all new users to use Rust. Please refrain from making personal attacks