(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) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| (1) | ||
vector(): vector(Allocator()){} | (since C++11) (until C++17) | |
vector()noexcept(noexcept(Allocator())): vector(Allocator()){} | (since C++17) (constexpr since C++20) | |
| (2) | ||
explicit vector(const Allocator& alloc= Allocator()); | (until C++11) | |
explicit vector(const Allocator& alloc); | (since C++11) (noexcept since C++17) (constexpr since C++20) | |
explicit vector( size_type count, const Allocator& alloc= Allocator()); | (3) | (since C++11) |
| (4) | ||
explicit vector( size_type count,const T& value= T(), const Allocator& alloc= Allocator()); | (until C++11) | |
vector( size_type count,const T& value, const Allocator& alloc= Allocator()); | (since C++11) (constexpr since C++20) | |
template<class InputIt> vector( InputIt first, InputIt last, | (5) | (constexpr since C++20) |
template<container-compatible-range<T> R> constexpr vector(std::from_range_t, R&& rg, | (6) | (since C++23) |
vector(const vector& other); | (7) | (constexpr since C++20) |
vector( vector&& other); | (8) | (since C++11) (noexcept since C++17) (constexpr since C++20) |
| (9) | ||
vector(const vector& other,const Allocator& alloc); | (since C++11) (constexpr since C++20) (until C++23) | |
constexpr vector(const vector& other, conststd::type_identity_t<Allocator>& alloc); | (since C++23) | |
| (10) | ||
vector( vector&& other,const Allocator& alloc); | (since C++11) (until C++23) | |
constexpr vector( vector&& other, conststd::type_identity_t<Allocator>& alloc); | (since C++23) | |
vector(std::initializer_list<T> init, const Allocator& alloc= Allocator()); | (11) | (since C++11) |
Constructs a newvector from a variety of data sources, optionally using a user supplied allocatoralloc.
vector with a default-constructed allocator.Allocator is notDefaultConstructible, the behavior is undefined.vector with the given allocatoralloc.vector withcount default-inserted objects ofT. No copies are made.vector withcount copies of elements with valuevalue.If | (since C++11) |
vector 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 any of the following conditions is satisfied, the behavior is undefined:
| (since C++11) |
vector with the contents of the rangerg. Each iterator inrg is dereferenced exactly once.T is notEmplaceConstructible intovector from*ranges::begin(rg).R models neithersized_range norforward_range, andT is notMoveInsertable intovector.vector with the contents ofother.The allocator is obtained as if by calling | (since C++11) |
vector 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 therange of elements to copy the elements from |
| 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 |
InputIt satisfies the requirements ofLegacyForwardIterator, then:T is only called\(\scriptsize N \)N times.T is called\(\scriptsize O(N) \)O(N) times.
| (until C++26) |
| (since C++26) |
T is called\(\scriptsize O(N) \)O(N) times.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) |
__cpp_lib_ranges_reserve_hint | 202502L | (C++26) | ranges::approximately_sized_range andranges::reserve_hint; overload(6) |
#include <iostream>#include <string>#include <vector> template<typename T>std::ostream& operator<<(std::ostream& s,conststd::vector<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::vector<std::string> words1{"the","frogurt","is","also","cursed"};std::cout<<"1: "<< words1; // words2 == words1std::vector<std::string> words2(words1.begin(), words1.end());std::cout<<"2: "<< words2; // words3 == words1std::vector<std::string> words3(words1);std::cout<<"3: "<< words3; // words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"}std::vector<std::string> words4(5,"Mo");std::cout<<"4: "<< words4; constauto rg={"cat","cow","crow"};#ifdef __cpp_lib_containers_rangesstd::vector<std::string> words5(std::from_range, rg);// overload (6)#elsestd::vector<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 134 | C++98 | overload(5) allowed up to2N copy constructor calls in the input iterator case | changed toO(N) calls |
| 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] |