(C++17) | ||||
| Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
| Associative | ||||
| Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
| Adaptors | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
| Views | ||||
(C++20) | ||||
(C++23) | ||||
| Tables | ||||
| Iterator invalidation | ||||
| Member function table | ||||
| Non-member function table |
| Member functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Non-member functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Deduction guides(C++17) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
list(): list(Allocator()){} | (1) | (since C++11) (constexpr since C++26) |
| (2) | ||
explicit list(const Allocator& alloc= Allocator()); | (until C++11) | |
explicit list(const Allocator& alloc); | (since C++11) (constexpr since C++26) | |
explicit list( size_type count, const Allocator& alloc= Allocator()); | (3) | (since C++11) (constexpr since C++26) |
| (4) | ||
explicit list( size_type count,const T& value= T(), const Allocator& alloc= Allocator()); | (until C++11) | |
list( size_type count,const T& value, const Allocator& alloc= Allocator()); | (since C++11) (constexpr since C++26) | |
template<class InputIt> list( InputIt first, InputIt last, | (5) | (constexpr since C++26) |
template<container-compatible-range<T> R> list(std::from_range_t, R&& rg, | (6) | (since C++23) (constexpr since C++26) |
list(const list& other); | (7) | (constexpr since C++26) |
list( list&& other); | (8) | (since C++11) (constexpr since C++26) |
| (9) | ||
list(const list& other,const Allocator& alloc); | (since C++11) (until C++23) | |
list(const list& other, conststd::type_identity_t<Allocator>& alloc); | (since C++23) (constexpr since C++26) | |
| (10) | ||
list( list&& other,const Allocator& alloc); | (since C++11) (until C++23) | |
list( list&& other,conststd::type_identity_t<Allocator>& alloc); | (since C++23) (constexpr since C++26) | |
list(std::initializer_list<T> init, const Allocator& alloc= Allocator()); | (11) | (since C++11) (constexpr since C++26) |
Constructs a newlist from a variety of data sources, optionally using a user supplied allocatoralloc.
list with a default-constructed allocator.Allocator is notDefaultConstructible, the behavior is undefined.list with the given allocatoralloc.list withcount default-inserted objects ofT. No copies are made.list withcount copies of elements with valuevalue.If | (since C++11) |
list with the contents of the range[first, last). Each iterator in[first, last) is dereferenced exactly once.If | (until C++11) |
This overload participates in overload resolution only if If | (since C++11) |
list with the contents of the rangerg. Each iterator inrg is dereferenced exactly once.list with the contents ofother.The allocator is obtained as if by callingstd::allocator_traits<Allocator>::select_on_container_copy_construction | (since C++11) |
list with the contents ofother. The allocator is obtained by move construction fromother.get_allocator().Contents |
| alloc | - | allocator to use for all memory allocations of this container |
| count | - | the size of the container |
| value | - | the value to initialize elements of the container with |
| first, last | - | the pair of iterators defining the sourcerange of elements to copy |
| other | - | another container to be used as source to initialize the elements of the container with |
| init | - | initializer list to initialize the elements of the container with |
| rg | - | a container compatible range |
Calls toAllocator::allocate may throw.
After container move construction (overload(8)), references, pointers, and iterators (other than the end iterator) toother remain valid, but refer to elements that are now in*this. The current standard makes this guarantee via the blanket statement in[container.reqmts]/67, and a more direct guarantee is under consideration viaLWG issue 2321.
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges | 202202L | (C++23) | Ranges-aware construction and insertion; overload(6) |
#include <iostream>#include <list>#include <string> template<typename T>std::ostream& operator<<(std::ostream& s,conststd::list<T>& v){ s.put('{');for(char comma[]{'\0',' ','\0'};constauto& e: v) s<< comma<< e, comma[0]=',';return s<<"}\n";} int main(){// C++11 initializer list syntax:std::list<std::string> words1{"the","frogurt","is","also","cursed"};std::cout<<"1: "<< words1; // words2 == words1std::list<std::string> words2(words1.begin(), words1.end());std::cout<<"2: "<< words2; // words3 == words1std::list<std::string> words3(words1);std::cout<<"3: "<< words3; // words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"}std::list<std::string> words4(5,"Mo");std::cout<<"4: "<< words4; constauto rg={"cat","cow","crow"};#ifdef __cpp_lib_containers_rangesstd::list<std::string> words5(std::from_range, rg);// overload (6)#elsestd::list<std::string> words5(rg.begin(), rg.end());// overload (5)#endifstd::cout<<"5: "<< words5;}
Output:
1: {the, frogurt, is, also, cursed}2: {the, frogurt, is, also, cursed}3: {the, frogurt, is, also, cursed}4: {Mo, Mo, Mo, Mo, Mo}5: {cat, cow, crow}The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 438 | C++98 | overload(5) would only call overload(4) if InputIt is an integral type | calls overload(4) ifInputItis not anLegacyInputIterator |
| LWG 2193 | C++11 | the default constructor was explicit | made non-explicit |
| LWG 2210 | C++11 | overload(3) did not have an allocator parameter | added the parameter |
| N3346 | C++11 | for overload(3), the elements in the container were value-initialized | they are default-inserted |
| assigns values to the container (public member function)[edit] | |
| assigns values to the container (public member function)[edit] |