(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) ifInputIt is 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] |