[vector.bool] (original) (raw)
To optimize space allocation, a specialization of vector forboolelements is provided:namespace std { template<class Allocator> class vector<bool, Allocator> { public: using value_type = bool;using allocator_type = Allocator;using pointer = implementation-defined;using const_pointer = implementation-defined;using const_reference = bool;using size_type = implementation-defined; using difference_type = implementation-defined; 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>;class reference { friend class vector;constexpr reference() noexcept;public: constexpr reference(const reference&) = default;constexpr ~reference();constexpr operator bool() const noexcept;constexpr reference& operator=(const bool x) noexcept;constexpr reference& operator=(const reference& x) noexcept;constexpr void flip() noexcept; };constexpr vector() : vector(Allocator()) { } constexpr explicit vector(const Allocator&);constexpr explicit vector(size_type n, const Allocator& = Allocator());constexpr vector(size_type n, const bool& value, const Allocator& = Allocator());template<class InputIterator> constexpr vector(InputIterator first, InputIterator last, const Allocator& = Allocator());constexpr vector(const vector& x);constexpr vector(vector&& x);constexpr vector(const vector&, const Allocator&);constexpr vector(vector&&, const Allocator&);constexpr vector(initializer_list<bool>, const Allocator& = Allocator()));constexpr ~vector();constexpr vector& operator=(const vector& x);constexpr vector& operator=(vector&& x);constexpr vector& operator=(initializer_list<bool>);template<class InputIterator> constexpr void assign(InputIterator first, InputIterator last);constexpr void assign(size_type n, const bool& t);constexpr void assign(initializer_list<bool>);constexpr allocator_type get_allocator() const noexcept;constexpr iterator begin() noexcept;constexpr const_iterator begin() const noexcept;constexpr iterator end() noexcept;constexpr const_iterator end() const noexcept;constexpr reverse_iterator rbegin() noexcept;constexpr const_reverse_iterator rbegin() const noexcept;constexpr reverse_iterator rend() noexcept;constexpr const_reverse_iterator rend() const noexcept;constexpr const_iterator cbegin() const noexcept;constexpr const_iterator cend() const noexcept;constexpr const_reverse_iterator crbegin() const noexcept;constexpr const_reverse_iterator crend() const noexcept;[[nodiscard]] constexpr bool empty() const noexcept;constexpr size_type size() const noexcept;constexpr size_type max_size() const noexcept;constexpr size_type capacity() const noexcept;constexpr void resize(size_type sz, bool c = false);constexpr void reserve(size_type n);constexpr void shrink_to_fit();constexpr reference operator[](size_type n);constexpr const_reference operator[](size_type n) const;constexpr const_reference at(size_type n) const;constexpr reference at(size_type n);constexpr reference front();constexpr const_reference front() const;constexpr reference back();constexpr const_reference back() const;template<class... Args> constexpr reference emplace_back(Args&&... args);constexpr void push_back(const bool& x);constexpr void pop_back();template<class... Args> constexpr iterator emplace(const_iterator position, Args&&... args);constexpr iterator insert(const_iterator position, const bool& x);constexpr iterator insert(const_iterator position, size_type n, const bool& x);template<class InputIterator> constexpr iterator insert(const_iterator position, InputIterator first, InputIterator last);constexpr iterator insert(const_iterator position, initializer_list<bool> il);constexpr iterator erase(const_iterator position);constexpr iterator erase(const_iterator first, const_iterator last);constexpr void swap(vector&);constexpr static void swap(reference x, reference y) noexcept;constexpr void flip() noexcept; constexpr void clear() noexcept;};}