Standard library header <inplace_vector> (C++26)
From cppreference.com
This header is part of the containers library.
Includes | ||
(C++20) | Three-way comparison operator support | |
(C++11) | std::initializer_list class template | |
Classes | ||
(C++26) | resizable, fixed capacity, inplace contiguous array (class template) | |
Functions | ||
erases all elements satisfying specific criteria (function template) |
[edit]Synopsis
// mostly freestanding#include <compare>#include <initializer_list> namespace std {// class template inplace_vectortemplate<class T, size_t N>class inplace_vector;// partially freestanding // erasuretemplate<class T, size_t N, class U = T>constexprtypename inplace_vector<T, N>::size_type erase(inplace_vector<T, N>& c, const U& value);template<class T, size_t N, class Predicate>constexprtypename inplace_vector<T, N>::size_type erase_if(inplace_vector<T, N>& c, Predicate pred);}
[edit]Class template std::inplace_vector
namespace std {template<class T, size_t N>class inplace_vector {public:// types:using value_type = T;using pointer = T*;using const_pointer =const T*;using reference = value_type&;using const_reference =const value_type&;using size_type = size_t;using difference_type = ptrdiff_t;using iterator =/* implementation-defined */;using const_iterator =/* implementation-defined */;using reverse_iterator =std::reverse_iterator<iterator>;using const_reverse_iterator =std::reverse_iterator<const_iterator>; // construct/copy/destroyconstexpr inplace_vector()noexcept;constexprexplicit inplace_vector(size_type n);// freestanding-deletedconstexpr inplace_vector(size_type n, const T& value);// freestanding-deletedtemplate<class InputIter>constexpr inplace_vector(InputIter first, InputIter last);// freestanding-deletedtemplate<container-compatible-range<T> R>constexpr inplace_vector(from_range_t, R&& rg);// freestanding-deletedconstexpr inplace_vector(const inplace_vector&);constexpr inplace_vector(inplace_vector&&)noexcept( N ==0|| is_nothrow_move_constructible_v<T>);constexpr inplace_vector(initializer_list<T> il);// freestanding-deletedconstexpr ~inplace_vector();constexpr inplace_vector& operator=(const inplace_vector& other);constexpr inplace_vector& operator=(inplace_vector&& other)noexcept( N ==0||(is_nothrow_move_assignable_v<T>&& is_nothrow_move_constructible_v<T>));constexpr inplace_vector& operator=(initializer_list<T>);// freestanding-deletedtemplate<class InputIter>constexprvoid assign(InputIter first, InputIter last);// freestanding-deletedtemplate<container-compatible-range<T> R>constexprvoid assign_range(R&& rg);// freestanding-deletedconstexprvoid assign(size_type n, const T& u);// freestanding-deletedconstexprvoid assign(initializer_list<T> il);// freestanding-deleted // iteratorsconstexpr iterator begin()noexcept;constexpr const_iterator begin()constnoexcept;constexpr iterator end()noexcept;constexpr const_iterator end()constnoexcept;constexpr reverse_iterator rbegin()noexcept;constexpr const_reverse_iterator rbegin()constnoexcept;constexpr reverse_iterator rend()noexcept;constexpr const_reverse_iterator rend()constnoexcept; constexpr const_iterator cbegin()constnoexcept;constexpr const_iterator cend()constnoexcept;constexpr const_reverse_iterator crbegin()constnoexcept;constexpr const_reverse_iterator crend()constnoexcept; // size/capacityconstexprbool empty()constnoexcept;constexpr size_type size()constnoexcept;staticconstexpr size_type max_size()noexcept;staticconstexpr size_type capacity()noexcept;constexprvoid resize(size_type sz);// freestanding-deletedconstexprvoid resize(size_type sz, const T& c);// freestanding-deletedstaticconstexprvoid reserve(size_type n);// freestanding-deletedstaticconstexprvoid shrink_to_fit()noexcept; // element accessconstexpr reference operator[](size_type n);constexpr const_reference operator[](size_type n)const;constexpr reference at(size_type n);// freestanding-deletedconstexpr const_reference at(size_type n)const;// freestanding-deletedconstexpr reference front();constexpr const_reference front()const;constexpr reference back();constexpr const_reference back()const; // data accessconstexpr T* data()noexcept;constexprconst T* data()constnoexcept; // modifierstemplate<class... Args>constexpr reference emplace_back(Args&&... args);// freestanding-deletedconstexpr reference push_back(const T& x);// freestanding-deletedconstexpr reference push_back(T&& x);// freestanding-deletedtemplate<container-compatible-range<T> R>constexprvoid append_range(R&& rg);// freestanding-deletedconstexprvoid pop_back(); template<class... Args>constexpr pointer try_emplace_back(Args&&... args);constexpr pointer try_push_back(const T& x);constexpr pointer try_push_back(T&& x);template<container-compatible-range<T> R>constexprranges::borrowed_iterator_t<R> try_append_range(R&& rg); template<class... Args>constexpr reference unchecked_emplace_back(Args&&... args);constexpr reference unchecked_push_back(const T& x);constexpr reference unchecked_push_back(T&& x); template<class... Args>constexpr iterator emplace(const_iterator position, Args&&... args);// freestanding-deletedconstexpr iterator insert(const_iterator position, const T& x);// freestanding-deletedconstexpr iterator insert(const_iterator position, T&& x);// freestanding-deletedconstexpr iterator insert(const_iterator position, size_type n, // freestanding-deletedconst T& x);template<class InputIter>constexpr iterator insert(const_iterator position, // freestanding-deleted InputIter first, InputIter last);template<container-compatible-range<T> R>constexpr iterator insert_range(const_iterator position, R&& rg);// freestanding-deletedconstexpr iterator insert(const_iterator position, // freestanding-deleted initializer_list<T> il);constexpr iterator erase(const_iterator position);constexpr iterator erase(const_iterator first, const_iterator last);constexprvoid swap(inplace_vector& x)noexcept(N ==0||(is_nothrow_swappable_v<T>&& is_nothrow_move_constructible_v<T>));constexprvoid clear()noexcept; constexprfriendbool operator==(const inplace_vector& x, const inplace_vector& y);constexprfriend/*synth-three-way-result*/<T> operator<=>(const inplace_vector& x, const inplace_vector& y);constexprfriendvoid swap(inplace_vector& x, inplace_vector& y)noexcept( N ==0||(is_nothrow_swappable_v<T>&& is_nothrow_move_constructible_v<T>)){ x.swap(y);}};}