std::vector<bool>
|   Defined in header  <vector>
  | 
||
|   template<     class Allocator  | 
||
std::vector<bool> is a possibly space-efficient specialization of std::vector for the type bool.
The manner in which std::vector<bool> is made space efficient (as well as whether it is optimized at all) is implementation defined. One potential optimization involves coalescing vector elements such that each element occupies a single bit instead of sizeof(bool) bytes.
std::vector<bool> behaves similarly to std::vector, but in order to be space efficient, it:
- Does not necessarily store its elements as a contiguous array.
 - Exposes class std::vector<bool>::reference as a method of accessing individual bits. In particular, objects of this class are returned by operator[] by value.
 - Does not use std::allocator_traits::construct to construct bit values.
 - Does not guarantee that different elements in the same container can be modified concurrently by different threads.
 
Member types
| Member type | Definition | ||||
 value_type
 | 
bool | ||||
 allocator_type
 | 
 Allocator | ||||
 size_type
 | 
implementation-defined | ||||
 difference_type
 | 
implementation-defined | ||||
|   proxy class representing a reference to a single bool  (class)  | |||||
 const_reference
 | 
bool | ||||
 pointer
 | 
implementation-defined | ||||
 const_pointer
 | 
implementation-defined | ||||
 iterator
 | 
 
  | ||||
 const_iterator
 | 
 
  | ||||
 reverse_iterator
 | 
std::reverse_iterator<iterator> | ||||
 const_reverse_iterator
 | 
std::reverse_iterator<const_iterator> | 
Member functions
  constructs the vector (public member function of std::vector<T,Allocator>)  | |
  destructs the vector (public member function of std::vector<T,Allocator>)  | |
|   assigns values to the container  (public member function of std::vector<T,Allocator>)  | |
|   assigns values to the container  (public member function of std::vector<T,Allocator>)  | |
|   returns the associated allocator  (public member function of std::vector<T,Allocator>)  | |
 Element access | |
|   access specified element with bounds checking  (public member function of std::vector<T,Allocator>)  | |
|   access  specified element  (public member function of std::vector<T,Allocator>)  | |
|   access the first element  (public member function of std::vector<T,Allocator>)  | |
|   access the last element  (public member function of std::vector<T,Allocator>)  | |
 Iterators | |
|    (C++11)  | 
  returns an iterator to the beginning  (public member function of std::vector<T,Allocator>)  | 
|    (C++11)  | 
  returns an iterator to the end  (public member function of std::vector<T,Allocator>)  | 
|    (C++11)  | 
  returns a reverse iterator to the beginning  (public member function of std::vector<T,Allocator>)  | 
|    (C++11)  | 
  returns a reverse iterator to the end  (public member function of std::vector<T,Allocator>)  | 
 Capacity | |
|   checks whether the container  is empty  (public member function of std::vector<T,Allocator>)  | |
|   returns the number of elements  (public member function of std::vector<T,Allocator>)  | |
|   returns the maximum possible number of elements  (public member function of std::vector<T,Allocator>)  | |
|   reserves storage  (public member function of std::vector<T,Allocator>)  | |
|   returns the number of elements that can be held in currently allocated storage  (public member function of std::vector<T,Allocator>)  | |
 Modifiers | |
|   clears the contents  (public member function of std::vector<T,Allocator>)  | |
|   inserts elements   (public member function of std::vector<T,Allocator>)  | |
|    (C++11)  | 
  constructs element in-place   (public member function of std::vector<T,Allocator>)  | 
|   erases elements  (public member function of std::vector<T,Allocator>)  | |
|   adds an element to the end  (public member function of std::vector<T,Allocator>)  | |
|    (C++11)  | 
  constructs an element in-place at the end  (public member function of std::vector<T,Allocator>)  | 
|   removes the last element  (public member function of std::vector<T,Allocator>)  | |
|   changes the number of elements stored  (public member function of std::vector<T,Allocator>)  | |
|   swaps the contents  (public member function of std::vector<T,Allocator>)  | |
   
 | |
|   flips all the bits  (public member function)  | |
|    [static]  | 
  swaps two std::vector<bool>::references (public static member function)  | 
Non-member functions
|    (removed in C++20)(removed in C++20)(removed in C++20)(removed in C++20)(removed in C++20)(C++20)  | 
  lexicographically compares the values of two vectors (function template)  | 
|   specializes the std::swap algorithm  (function template)  | |
|   erases all elements satisfying specific criteria  (function template)  | 
Helper classes
|    (C++11)  | 
  hash support for std::vector<bool>  (class template specialization)  | 
Deduction guides (C++17)
Notes
If the size of the bitset is known at compile time, std::bitset may be used, which offers a richer set of member functions. In addition, boost::dynamic_bitset exists as an alternative to std::vector<bool>.
Since its representation may be optimized, std::vector<bool> does not necessarily meet all Container or SequenceContainer requirements. For example, because std::vector<bool>::iterator is implementation-defined, it may not satisfy the LegacyForwardIterator requirement. Use of algorithms such as std::search that require LegacyForwardIterators may result in either compile-time or run-time errors.
The Boost.Container version of vector does not specialize for bool.
Notes
| Feature-test macro | Value | Std | Feature | 
|---|---|---|---|
__cpp_lib_containers_ranges | 
202202L | (C++23) | Ranges construction and insertion for containers | 
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior | 
|---|---|---|---|
| LWG 2187 | C++11 | specializations for bool lacked emplace and emplace_back member functions
 | 
added |