...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::container::static_vector — A variable-size array container with fixed capacity.
// In header: <boost/container/static_vector.hpp> template<typename Value, std::size_t Capacity> class static_vector : public boost::container::vector< Value, dtl::static_storage_allocator< Value, Capacity > > { public: // types typedef base_t::value_type value_type; // The type of elements stored in the container. typedef base_t::size_type size_type; // The unsigned integral type used by the container. typedef base_t::difference_type difference_type; // The pointers difference type. typedef base_t::pointer pointer; // The pointer type. typedef base_t::const_pointer const_pointer; // The const pointer type. typedef base_t::reference reference; // The value reference type. typedef base_t::const_reference const_reference; // The value const reference type. typedef base_t::iterator iterator; // The iterator type. typedef base_t::const_iterator const_iterator; // The const iterator type. typedef base_t::reverse_iterator reverse_iterator; // The reverse iterator type. typedef base_t::const_reverse_iterator const_reverse_iterator; // The const reverse iterator. // construct/copy/destruct static_vector() noexcept; explicit static_vector(size_type); static_vector(size_type, default_init_t); static_vector(size_type, value_type const &); template<typename Iterator> static_vector(Iterator, Iterator); static_vector(std::initializer_list< value_type >); static_vector(static_vector const &); static_vector(static_vector const &, const allocator_type &); static_vector(static_vector &&, const allocator_type &) noexcept(boost::container::dtl::is_nothrow_move_constructible< value_type >::value)); explicit static_vector(const allocator_type &); template<std::size_t C> static_vector(static_vector< value_type, C > const &); static_vector(static_vector &&) noexcept(boost::container::dtl::is_nothrow_move_constructible< value_type >::value)); template<std::size_t C> static_vector(static_vector< value_type, C > &&); static_vector & operator=(const static_vector &); static_vector & operator=(std::initializer_list< value_type >); template<std::size_t C> static_vector & operator=(static_vector< value_type, C > const &); static_vector & operator=(static_vector &&); template<std::size_t C> static_vector & operator=(static_vector< value_type, C > &&); ~static_vector(); // public member functions void swap(static_vector &); template<std::size_t C> void swap(static_vector< value_type, C > &); void resize(size_type); void resize(size_type, default_init_t); void resize(size_type, value_type const &); void reserve(size_type) noexcept; void push_back(value_type const &); void push_back(value_type &&); void pop_back(); iterator insert(const_iterator, value_type const &); iterator insert(const_iterator, value_type &&); iterator insert(const_iterator, size_type, value_type const &); template<typename Iterator> iterator insert(const_iterator, Iterator, Iterator); iterator insert(const_iterator, std::initializer_list< value_type >); iterator erase(const_iterator); iterator erase(const_iterator, const_iterator); template<typename Iterator> void assign(Iterator, Iterator); void assign(std::initializer_list< value_type >); void assign(size_type, value_type const &); template<class... Args> reference emplace_back(Args &&...); template<class... Args> iterator emplace(const_iterator, Args &&...); void clear() noexcept; reference at(size_type); const_reference at(size_type) const; reference operator[](size_type); const_reference operator[](size_type) const; iterator nth(size_type); const_iterator nth(size_type) const; size_type index_of(iterator); size_type index_of(const_iterator) const; reference front(); const_reference front() const; reference back(); const_reference back() const; Value * data() noexcept; const Value * data() const noexcept; iterator begin() noexcept; const_iterator begin() const noexcept; const_iterator cbegin() const noexcept; iterator end() noexcept; const_iterator end() const noexcept; const_iterator cend() const noexcept; reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin() const noexcept; const_reverse_iterator crbegin() const noexcept; reverse_iterator rend() noexcept; const_reverse_iterator rend() const noexcept; const_reverse_iterator crend() const noexcept; size_type size() const noexcept; bool empty() const noexcept; // public static functions static size_type capacity() noexcept; static size_type max_size() noexcept; // public data members static const size_type static_capacity; // The capacity/max size of the container. };
static_vector is a sequence container like boost::container::vector with contiguous storage that can change in size, along with the static allocation, low overhead, and fixed capacity of boost::array.
A static_vector is a sequence that supports random access to elements, constant time insertion and removal of elements at the end, and linear time insertion and removal of elements at the beginning or in the middle. The number of elements in a static_vector may vary dynamically up to a fixed capacity because elements are stored within the object itself similarly to an array. However, objects are initialized as they are inserted into static_vector unlike C arrays or std::array which must construct all elements on instantiation. The behavior of static_vector enables the use of statically allocated elements in cases with complex object lifetime requirements that would otherwise not be trivially possible.
Error Handling. Insertion beyond the capacity result in throwing std::bad_alloc() if exceptions are enabled or calling throw_bad_alloc() if not enabled.
std::out_of_range is thrown if out of bound access is performed in at()
if exceptions are enabled, throw_out_of_range() if not enabled.
typename Value
The type of element that will be stored.
std::size_t Capacity
The maximum number of elements static_vector
can store, fixed at compile time.
static_vector
public
construct/copy/destructstatic_vector() noexcept;Constructs an empty
static_vector
. Throws. Nothing.
Complexity. Constant O(1).
explicit static_vector(size_type count);Constructs a
static_vector
containing count value initialized values.
Throws. If Value's value initialization throws.
Complexity. Linear O(N).
Parameters: |
|
||
Requires: |
|
static_vector(size_type count, default_init_t);Constructs a
static_vector
containing count default initialized values.
Throws. If Value's default initialization throws.
Complexity. Linear O(N).
Note. Non-standard extension
Parameters: |
|
||
Requires: |
|
static_vector(size_type count, value_type const & value);Constructs a
static_vector
containing count copies of value.
Throws. If Value's copy constructor throws.
Complexity. Linear O(N).
Parameters: |
|
||||
Requires: |
|
template<typename Iterator> static_vector(Iterator first, Iterator last);Constructs a
static_vector
containing copy of a range [first, last)
.
Throws. If Value's constructor taking a dereferenced Iterator throws.
Complexity. Linear O(N).
Parameters: |
|
||||
Requires: |
|
static_vector(std::initializer_list< value_type > il);Constructs a
static_vector
containing copy of a range [il.begin(), il.end())
.
Throws. If Value's constructor taking a dereferenced std::initializer_list throws.
Complexity. Linear O(N).
Parameters: |
|
||
Requires: |
|
static_vector(static_vector const & other);Constructs a copy of other
static_vector
.
Throws. If Value's copy constructor throws.
Complexity. Linear O(N).
Parameters: |
|
static_vector(static_vector const & other, const allocator_type &);
static_vector(static_vector && other, const allocator_type &) noexcept(boost::container::dtl::is_nothrow_move_constructible< value_type >::value));
explicit static_vector(const allocator_type &);
template<std::size_t C> static_vector(static_vector< value_type, C > const & other);Constructs a copy of other
static_vector
.
Throws. If Value's copy constructor throws.
Complexity. Linear O(N).
Parameters: |
|
||
Requires: |
|
static_vector(static_vector && other) noexcept(boost::container::dtl::is_nothrow_move_constructible< value_type >::value));Move constructor. Moves Values stored in the other
static_vector
to this one.
Throws.
If has_nothrow_move<Value>::value
is true
and Value's move constructor throws.
If has_nothrow_move<Value>::value
is false
and Value's copy constructor throws.
Complexity. Linear O(N).
Parameters: |
|
template<std::size_t C> static_vector(static_vector< value_type, C > && other);Move constructor. Moves Values stored in the other
static_vector
to this one.
Throws.
If has_nothrow_move<Value>::value
is true
and Value's move constructor throws.
If has_nothrow_move<Value>::value
is false
and Value's copy constructor throws.
Complexity. Linear O(N).
Parameters: |
|
||
Requires: |
|
static_vector & operator=(const static_vector & other);Copy assigns Values stored in the other
static_vector
to this one.
Throws. If Value's copy constructor or copy assignment throws.
Complexity. Linear O(N).
Parameters: |
|
static_vector & operator=(std::initializer_list< value_type > il);Copy assigns Values stored in std::initializer_list to *this.
Throws. If Value's copy constructor or copy assignment throws.
Complexity. Linear O(N).
Parameters: |
|
template<std::size_t C> static_vector & operator=(static_vector< value_type, C > const & other);Copy assigns Values stored in the other
static_vector
to this one.
Throws. If Value's copy constructor or copy assignment throws.
Complexity. Linear O(N).
Parameters: |
|
||
Requires: |
|
static_vector & operator=(static_vector && other);Move assignment. Moves Values stored in the other
static_vector
to this one.
Throws.
If has_nothrow_move<Value>::value
is true
and Value's move constructor or move assignment throws.
If has_nothrow_move<Value>::value
is false
and Value's copy constructor or copy assignment throws.
Complexity. Linear O(N).
Parameters: |
|
template<std::size_t C> static_vector & operator=(static_vector< value_type, C > && other);Move assignment. Moves Values stored in the other
static_vector
to this one.
Throws.
If has_nothrow_move<Value>::value
is true
and Value's move constructor or move assignment throws.
If has_nothrow_move<Value>::value
is false
and Value's copy constructor or copy assignment throws.
Complexity. Linear O(N).
Parameters: |
|
||
Requires: |
|
~static_vector();Destructor. Destroys Values stored in this container.
Throws. Nothing
Complexity. Linear O(N).
static_vector
public member functionsvoid swap(static_vector & other);Swaps contents of the other
static_vector
and this one.
Throws.
If has_nothrow_move<Value>::value
is true
and Value's move constructor or move assignment throws,
If has_nothrow_move<Value>::value
is false
and Value's copy constructor or copy assignment throws,
Complexity. Linear O(N).
Parameters: |
|
template<std::size_t C> void swap(static_vector< value_type, C > & other);Swaps contents of the other
static_vector
and this one.
Throws.
If has_nothrow_move<Value>::value
is true
and Value's move constructor or move assignment throws,
If has_nothrow_move<Value>::value
is false
and Value's copy constructor or copy assignment throws,
Complexity. Linear O(N).
Parameters: |
|
||
Requires: |
|
void resize(size_type count);Inserts or erases elements at the end such that the size becomes count. New elements are value initialized.
Throws. If Value's value initialization throws.
Complexity. Linear O(N).
Parameters: |
|
||
Requires: |
|
void resize(size_type count, default_init_t);Inserts or erases elements at the end such that the size becomes count. New elements are default initialized.
Throws. If Value's default initialization throws.
Complexity. Linear O(N).
Note. Non-standard extension
Parameters: |
|
||
Requires: |
|
void resize(size_type count, value_type const & value);Inserts or erases elements at the end such that the size becomes count. New elements are copy constructed from value.
Throws. If Value's copy constructor throws.
Complexity. Linear O(N).
Parameters: |
|
||||
Requires: |
|
void reserve(size_type count) noexcept;This call has no effect because the Capacity of this container is constant.
Throws. Nothing.
Complexity. Linear O(N).
Parameters: |
|
||
Requires: |
|
void push_back(value_type const & value);Adds a copy of value at the end.
Throws. If Value's copy constructor throws.
Complexity. Constant O(1).
Parameters: |
|
||
Requires: |
|
void push_back(value_type && value);Moves value to the end.
Throws. If Value's move constructor throws.
Complexity. Constant O(1).
Parameters: |
|
||
Requires: |
|
void pop_back();Destroys last value and decreases the size.
Throws. Nothing by default.
Complexity. Constant O(1).
Requires: |
|
iterator insert(const_iterator p, value_type const & value);Inserts a copy of element at p.
Throws.
If Value's copy constructor or copy assignment throws
If Value's move constructor or move assignment throws.
Complexity. Constant or linear.
Parameters: |
|
||||
Requires: |
|
iterator insert(const_iterator p, value_type && value);Inserts a move-constructed element at p.
Throws. If Value's move constructor or move assignment throws.
Complexity. Constant or linear.
Parameters: |
|
||||
Requires: |
|
iterator insert(const_iterator p, size_type count, value_type const & value);Inserts a count copies of value at p.
Throws.
If Value's copy constructor or copy assignment throws.
If Value's move constructor or move assignment throws.
Complexity. Linear O(N).
Parameters: |
|
||||||
Requires: |
|
template<typename Iterator> iterator insert(const_iterator p, Iterator first, Iterator last);Inserts a copy of a range
[first, last)
at p.
Throws.
If Value's constructor and assignment taking a dereferenced Iterator
.
If Value's move constructor or move assignment throws.
Complexity. Linear O(N).
Parameters: |
|
||||||
Requires: |
|
iterator insert(const_iterator p, std::initializer_list< value_type > il);Inserts a copy of a range
[il.begin(), il.end())
at p.
Throws.
If Value's constructor and assignment taking a dereferenced std::initializer_list iterator.
Complexity. Linear O(N).
Parameters: |
|
||||
Requires: |
|
iterator erase(const_iterator p);Erases Value from p.
Throws. If Value's move assignment throws.
Complexity. Linear O(N).
Parameters: |
|
||
Requires: |
|
iterator erase(const_iterator first, const_iterator last);Erases Values from a range
[first, last)
.
Throws. If Value's move assignment throws.
Complexity. Linear O(N).
Parameters: |
|
||||
Requires: |
|
template<typename Iterator> void assign(Iterator first, Iterator last);Assigns a range
[first, last)
of Values to this container.
Throws. If Value's copy constructor or copy assignment throws,
Complexity. Linear O(N).
Parameters: |
|
||||
Requires: |
|
void assign(std::initializer_list< value_type > il);Assigns a range
[il.begin(), il.end())
of Values to this container.
Throws. If Value's copy constructor or copy assignment throws,
Complexity. Linear O(N).
Parameters: |
|
||
Requires: |
|
void assign(size_type count, value_type const & value);Assigns a count copies of value to this container.
Throws. If Value's copy constructor or copy assignment throws.
Complexity. Linear O(N).
Parameters: |
|
||||
Requires: |
|
template<class... Args> reference emplace_back(Args &&... args);Inserts a Value constructed with
std::forward<Args>(args)
... in the end of the container.
Throws. If in-place constructor throws or Value's move constructor throws.
Complexity. Constant O(1).
Parameters: |
|
||
Requires: |
|
||
Returns: |
A reference to the created object. |
template<class... Args> iterator emplace(const_iterator p, Args &&... args);Inserts a Value constructed with
std::forward<Args>(args)
... before p.
Throws. If in-place constructor throws or if Value's move constructor or move assignment throws.
Complexity. Constant or linear.
Parameters: |
|
||||
Requires: |
|
void clear() noexcept;Removes all elements from the container.
Throws. Nothing.
Complexity. Constant O(1).
reference at(size_type i);Returns reference to the i-th element.
Throws. std::out_of_range
exception by default.
Complexity. Constant O(1).
Parameters: |
|
||
Requires: |
|
||
Returns: |
reference to the i-th element from the beginning of the container. |
const_reference at(size_type i) const;Returns const reference to the i-th element.
Throws. std::out_of_range
exception by default.
Complexity. Constant O(1).
Parameters: |
|
||
Requires: |
|
||
Returns: |
const reference to the i-th element from the beginning of the container. |
reference operator[](size_type i);Returns reference to the i-th element.
Throws. Nothing by default.
Complexity. Constant O(1).
Parameters: |
|
||
Requires: |
|
||
Returns: |
reference to the i-th element from the beginning of the container. |
const_reference operator[](size_type i) const;Returns const reference to the i-th element.
Throws. Nothing by default.
Complexity. Constant O(1).
Parameters: |
|
||
Requires: |
|
||
Returns: |
const reference to the i-th element from the beginning of the container. |
iterator nth(size_type i);Returns a iterator to the i-th element.
Throws. Nothing by default.
Complexity. Constant O(1).
Parameters: |
|
||
Requires: |
|
||
Returns: |
a iterator to the i-th element. |
const_iterator nth(size_type i) const;Returns a const_iterator to the i-th element.
Throws. Nothing by default.
Complexity. Constant O(1).
Parameters: |
|
||
Requires: |
|
||
Returns: |
a const_iterator to the i-th element. |
size_type index_of(iterator p);Returns the index of the element pointed by p.
Throws. Nothing by default.
Complexity. Constant O(1).
Parameters: |
|
||
Requires: |
|
||
Returns: |
The index of the element pointed by p. |
size_type index_of(const_iterator p) const;Returns the index of the element pointed by p.
Throws. Nothing by default.
Complexity. Constant O(1).
Parameters: |
|
||
Requires: |
|
||
Returns: |
a const_iterator to the i-th element. |
reference front();Returns reference to the first element.
Throws. Nothing by default.
Complexity. Constant O(1).
Requires: |
|
Returns: |
reference to the first element from the beginning of the container. |
const_reference front() const;Returns const reference to the first element.
Throws. Nothing by default.
Complexity. Constant O(1).
Requires: |
|
Returns: |
const reference to the first element from the beginning of the container. |
reference back();Returns reference to the last element.
Throws. Nothing by default.
Complexity. Constant O(1).
Requires: |
|
Returns: |
reference to the last element from the beginning of the container. |
const_reference back() const;Returns const reference to the first element.
Throws. Nothing by default.
Complexity. Constant O(1).
Requires: |
|
Returns: |
const reference to the last element from the beginning of the container. |
Value * data() noexcept;Pointer such that
[data(), data() + size())
is a valid range. For a non-empty vector data() == &front()
. Throws. Nothing.
Complexity. Constant O(1).
const Value * data() const noexcept;Const pointer such that
[data(), data() + size())
is a valid range. For a non-empty vector data() == &front()
. Throws. Nothing.
Complexity. Constant O(1).
iterator begin() noexcept;Returns iterator to the first element.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
iterator to the first element contained in the vector. |
const_iterator begin() const noexcept;Returns const iterator to the first element.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
const_iterator to the first element contained in the vector. |
const_iterator cbegin() const noexcept;Returns const iterator to the first element.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
const_iterator to the first element contained in the vector. |
iterator end() noexcept;Returns iterator to the one after the last element.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
iterator pointing to the one after the last element contained in the vector. |
const_iterator end() const noexcept;Returns const iterator to the one after the last element.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
const_iterator pointing to the one after the last element contained in the vector. |
const_iterator cend() const noexcept;Returns const iterator to the one after the last element.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
const_iterator pointing to the one after the last element contained in the vector. |
reverse_iterator rbegin() noexcept;Returns reverse iterator to the first element of the reversed container.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
reverse_iterator pointing to the beginning of the reversed static_vector. |
const_reverse_iterator rbegin() const noexcept;Returns const reverse iterator to the first element of the reversed container.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
const_reverse_iterator pointing to the beginning of the reversed static_vector. |
const_reverse_iterator crbegin() const noexcept;Returns const reverse iterator to the first element of the reversed container.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
const_reverse_iterator pointing to the beginning of the reversed static_vector. |
reverse_iterator rend() noexcept;Returns reverse iterator to the one after the last element of the reversed container.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
reverse_iterator pointing to the one after the last element of the reversed static_vector. |
const_reverse_iterator rend() const noexcept;Returns const reverse iterator to the one after the last element of the reversed container.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
const_reverse_iterator pointing to the one after the last element of the reversed static_vector. |
const_reverse_iterator crend() const noexcept;Returns const reverse iterator to the one after the last element of the reversed container.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
const_reverse_iterator pointing to the one after the last element of the reversed static_vector. |
size_type size() const noexcept;Returns the number of stored elements.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
Number of elements contained in the container. |
bool empty() const noexcept;Queries if the container contains elements.
Throws. Nothing.
Complexity. Constant O(1).
Returns: |
true if the number of elements contained in the container is equal to 0. |