(C++17) | ||||
Sequence | ||||
(C++11) | ||||
inplace_vector (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 |
Defined in header <inplace_vector> | ||
template< class T, | (since C++26) | |
inplace_vector
is a dynamically-resizable array with contiguous inplace storage. The elements of typeT
are stored and properly aligned within the object itself. The capacity of the internal storage is fixed at compile-time and is equal toN.
The elements are stored contiguously, which means that elements can be accessed not only through iterators or random-accessoperator[], but also using offsets to regular pointers to elements. A pointer to an element of aninplace_vector
may be passed to any function that expects a pointer to an element of a C-array.
Theinplace_vector
modelsContainer,ReversibleContainer,ContiguousContainer, andSequenceContainer, including most of theoptional sequence container requirements, except that thepush_front
,emplace_front
,pop_front
, andprepend_range
member functions are not provided.
For any positiveN,std::inplace_vector<T, N>::iterator
andstd::inplace_vector<T, N>::const_iterator
meet theConstexprIterator requirements.
The specializationstd::inplace_vector<T,0> isTriviallyCopyable and is empty.std::is_trivially_default_constructible_v<std::inplace_vector<T,0>> is alsotrue.
Any member function ofstd::inplace_vector<T, N> that would cause insertion beyond the capacityN throwsstd::bad_alloc.
The complexity of common operations oninplace_vector
s is as follows:
operator[]
orat()
– constant:𝓞(1).Contents |
std::inplace_vector
iterator invalidation guarantees differ fromstd::vector:
inplace_vector
invalidates all iterators;inplace_vector
s invalidates all iterators (during swap, the iterator will continue to point to the same array element, and may thus change its value).The following member functions potentially invalidate iterators:operator=
,assign
,assign_range
,clear
,emplace
,erase
,insert
,insert_range
,pop_back
,resize
, andswap
.
The following member functions potentially invalidateend
iterator only:append_range
,emplace_back
,push_back
,try_append_range
,try_emplace_back
,try_push_back
,unchecked_emplace_back
, andunchecked_push_back
.
T | - | element type. Must beMoveConstructible andMoveAssignable. |
N | - | capacity, i.e. the maximum number of elements in theinplace_vector (might be0). |
Type | Definition |
value_type | T [edit] |
size_type | std::size_t[edit] |
difference_type | std::ptrdiff_t[edit] |
reference | value_type&[edit] |
const_reference | const value_type&[edit] |
pointer | value_type*[edit] |
const_pointer | const value_type*[edit] |
iterator | implementation-definedLegacyRandomAccessIterator andrandom_access_iterator tovalue_type [edit] |
const_iterator | implementation-definedLegacyRandomAccessIterator,ConstexprIterator(since C++26) andrandom_access_iterator toconst value_type[edit] |
reverse_iterator | std::reverse_iterator<iterator>[edit] |
const_reverse_iterator | std::reverse_iterator<const_iterator>[edit] |
constructs theinplace_vector (public member function)[edit] | |
destructs theinplace_vector (public member function)[edit] | |
assigns values to the container (public member function)[edit] | |
assigns values to the container (public member function)[edit] | |
assigns a range of values to the container (public member function)[edit] | |
Element access | |
access specified element with bounds checking (public member function)[edit] | |
access specified element (public member function)[edit] | |
access the first element (public member function)[edit] | |
access the last element (public member function)[edit] | |
direct access to the underlying contiguous storage (public member function)[edit] | |
Iterators | |
returns an iterator to the beginning (public member function)[edit] | |
returns an iterator to the end (public member function)[edit] | |
returns a reverse iterator to the beginning (public member function)[edit] | |
returns a reverse iterator to the end (public member function)[edit] | |
Size and capacity | |
checks whether the container is empty (public member function)[edit] | |
returns the number of elements (public member function)[edit] | |
[static] | returns the maximum possible number of elements (public static member function)[edit] |
[static] | returns the number of elements that can be held in currently allocated storage (public static member function)[edit] |
changes the number of elements stored (public member function)[edit] | |
[static] | reserves storage (public static member function)[edit] |
[static] | reduces memory usage by freeing unused memory (public static member function)[edit] |
Modifiers | |
inserts elements (public member function)[edit] | |
inserts a range of elements (public member function)[edit] | |
constructs element in-place (public member function)[edit] | |
constructs an element in-place at the end (public member function)[edit] | |
tries to construct an element in-place at the end (public member function)[edit] | |
unconditionally constructs an element in-place at the end (public member function)[edit] | |
adds an element to the end (public member function)[edit] | |
tries to add an element to the end (public member function)[edit] | |
unconditionally adds an element to the end (public member function)[edit] | |
removes the last element (public member function)[edit] | |
adds a range of elements to the end (public member function)[edit] | |
tries to add a range of elements to the end (public member function)[edit] | |
clears the contents (public member function)[edit] | |
erases elements (public member function)[edit] | |
swaps the contents (public member function)[edit] |
specializes thestd::swap algorithm (function template)[edit] | |
erases all elements satisfying specific criteria (function template)[edit] | |
(C++26) | lexicographically compares the values of twoinplace_vector s(function template)[edit] |
The number of elements in ainplace_vector
may vary dynamically up to a fixed capacity because elements are stored within the object itself similarly tostd::array. However, objects are initialized as they are inserted intoinplace_vector
unlike C arrays orstd::array , which must construct all elements on instantiation.
inplace_vector
is useful in environments where dynamic memory allocations are undesired.
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_inplace_vector | 202406L | (C++26) | std::inplace_vector : dynamically-resizable vector with fixed capacity inplace storage |
__cpp_lib_constexpr_inplace_vector | 202502L | (C++26) | constexprstd::inplace_vector for non-trivial element types |
#include <algorithm>#include <array>#include <cassert>#include <inplace_vector> int main(){ std::inplace_vector<int,4> v1{0,1,2};assert(v1.max_size()==4);assert(v1.capacity()==4);assert(v1.size()==3);assert(std::ranges::equal(v1,std::array{0,1,2}));assert(v1[0]==0);assert(v1.at(0)==0);assert(v1.front()==0);assert(*v1.begin()==0);assert(v1.back()==2); v1.push_back(3);assert(v1.back()==3);assert(std::ranges::equal(v1,std::array{0,1,2,3})); v1.resize(3);assert(std::ranges::equal(v1,std::array{0,1,2}));assert(v1.try_push_back(3)!= nullptr);assert(v1.back()==3);assert(v1.size()==4);assert(v1.try_push_back(13)== nullptr);// no placeassert(v1.back()==3);assert(v1.size()==4); v1.clear();assert(v1.size()==0);assert(v1.empty());}
resizable contiguous array (class template)[edit] | |
(C++11) | fixed-sized inplace contiguous array (class template)[edit] |
double-ended queue (class template)[edit] |
1. | inplace_vector — A reference implementation ofP0843R14 (std::inplace_vector ). |
2. | static_vector — Boost.Container implements inplace vector as a standalone type with its own guarantees. |
3. | fixed_vector — EASTL implements inplace vector via an extra template parameter. |
4. | small_vector — Folly also implements inplace vector via an extra template parameter. |
5. | stack_alloc — Howard Hinnant's Custom allocators that emulatestd::inplace_vector on top ofstd::vector. |