This header is part of thecontainers library.
Includes | ||
(C++20) | Three-way comparison operator support[edit] | |
(C++11) | std::initializer_list class template[edit] | |
Classes | ||
(C++26) | resizable, fixed capacity, inplace contiguous array (class template)[edit] | |
Functions | ||
erases all elements satisfying specific criteria (function template)[edit] |
// 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);}
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);}};}