(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 types | |||||||||||||||||||||
| Member functions | |||||||||||||||||||||
| Non-member functions | |||||||||||||||||||||
|
| ||||||||||||||||||||
| Deduction guides(C++17) | |||||||||||||||||||||
deque(): deque(Allocator()){} | (1) | (since C++11) (constexpr since C++26) |
| (2) | ||
explicit deque(const Allocator& alloc= Allocator()); | (until C++11) | |
explicit deque(const Allocator& alloc); | (since C++11) (constexpr since C++26) | |
explicit deque( size_type count, const Allocator& alloc= Allocator()); | (3) | (since C++11) (constexpr since C++26) |
| (4) | ||
explicit deque( size_type count,const T& value= T(), const Allocator& alloc= Allocator()); | (until C++11) | |
deque( size_type count,const T& value, const Allocator& alloc= Allocator()); | (since C++11) (constexpr since C++26) | |
template<class InputIt> deque( InputIt first, InputIt last, | (5) | (constexpr since C++26) |
template<container-compatible-range<T> R> deque(std::from_range_t, R&& rg, | (6) | (since C++23) (constexpr since C++26) |
deque(const deque& other); | (7) | (constexpr since C++26) |
deque( deque&& other); | (8) | (since C++11) (constexpr since C++26) |
| (9) | ||
deque(const deque& other,const Allocator& alloc); | (since C++11) (until C++23) | |
deque(const deque& other, conststd::type_identity_t<Allocator>& alloc); | (since C++23) (constexpr since C++26) | |
| (10) | ||
deque( deque&& other,const Allocator& alloc); | (since C++11) (until C++23) | |
deque( deque&& other,conststd::type_identity_t<Allocator>& alloc); | (since C++23) (constexpr since C++26) | |
deque(std::initializer_list<T> init, const Allocator& alloc= Allocator()); | (11) | (since C++11) (constexpr since C++26) |
Constructs a newdeque from a variety of data sources, optionally using a user supplied allocatoralloc.
deque with a default-constructed allocator.Allocator is notDefaultConstructible, the behavior is undefined.deque with the given allocatoralloc.deque withcount default-inserted objects ofT. No copies are made.deque withcount copies of elements with valuevalue.If | (since C++11) |
deque 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) |
deque with the contents of the rangerg. Each iterator inrg is dereferenced exactly once.deque with the contents ofother.The allocator is obtained as if by calling | (since C++11) |
deque 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 (overloads(8) and(10)), 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 <deque>#include <iostream>#include <string> template<typename T>std::ostream& operator<<(std::ostream& s,conststd::deque<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::deque<std::string> words1{"the","frogurt","is","also","cursed"};std::cout<<"1: "<< words1; // words2 == words1std::deque<std::string> words2(words1.begin(), words1.end());std::cout<<"2: "<< words2; // words3 == words1std::deque<std::string> words3(words1);std::cout<<"3: "<< words3; // words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"}std::deque<std::string> words4(5,"Mo");std::cout<<"4: "<< words4; constauto rg={"cat","cow","crow"};#ifdef __cpp_lib_containers_rangesstd::deque<std::string> words5(std::from_range, rg);// overload (6)#elsestd::deque<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 144 | C++98 | the complexity requirement of overload(5) was the same as that of the corresponding overload ofstd::vector | changed to linear complexity |
| LWG 237 | C++98 | the complexity requirement of overload (5) was linear infirst- last | changed to linear in std::distance(first, last) |
| 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] |