# std::vector<bool>

From cppreference.com
< cpp‎ | container

Defined in header `<vector>` |  |
template<class Allocator> class vector<bool, 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 (so &v[0] + n != &v[n])
- 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
reference | proxy class representing a reference to a single bool (class)
`const_reference` | bool
`pointer` | implementation-defined
`const_pointer` | implementation-defined
`iterator` | implementation-defined
`const_iterator` | implementation-defined
`reverse_iterator` | std::reverse_iterator<iterator>
`const_reverse_iterator` | std::reverse_iterator<const_iterator>

### Member functions

(constructor) | constructs the `vector` (public member function of `std::vector<T,Allocator>`)
(destructor) | destructs the `vector` (public member function of `std::vector<T,Allocator>`)
operator= | assigns values to the container (public member function of `std::vector<T,Allocator>`)
assign | assigns values to the container (public member function of `std::vector<T,Allocator>`)
get_allocator | returns the associated allocator (public member function of `std::vector<T,Allocator>`)

##### Element access

at | access specified element with bounds checking (public member function of `std::vector<T,Allocator>`)
operator[] | access specified element (public member function of `std::vector<T,Allocator>`)
front | access the first element (public member function of `std::vector<T,Allocator>`)
back | access the last element (public member function of `std::vector<T,Allocator>`)

##### Iterators

begin cbegin | returns an iterator to the beginning (public member function of `std::vector<T,Allocator>`)
end cend | returns an iterator to the end (public member function of `std::vector<T,Allocator>`)
rbegin crbegin | returns a reverse iterator to the beginning (public member function of `std::vector<T,Allocator>`)
rend crend | returns a reverse iterator to the end (public member function of `std::vector<T,Allocator>`)

##### Capacity

empty | checks whether the container is empty (public member function of `std::vector<T,Allocator>`)
size | returns the number of elements (public member function of `std::vector<T,Allocator>`)
max_size | returns the maximum possible number of elements (public member function of `std::vector<T,Allocator>`)
reserve | reserves storage (public member function of `std::vector<T,Allocator>`)
capacity | returns the number of elements that can be held in currently allocated storage (public member function of `std::vector<T,Allocator>`)

##### Modifiers

clear | clears the contents (public member function of `std::vector<T,Allocator>`)
insert | inserts elements (public member function of `std::vector<T,Allocator>`)
emplace (C++14) | constructs element in-place (public member function of `std::vector<T,Allocator>`)
erase | erases elements (public member function of `std::vector<T,Allocator>`)
push_back | adds an element to the end (public member function of `std::vector<T,Allocator>`)
emplace_back (C++14) | constructs elements in-place at the end (public member function of `std::vector<T,Allocator>`)
pop_back | removes the last element (public member function of `std::vector<T,Allocator>`)
resize | changes the number of elements stored (public member function of `std::vector<T,Allocator>`)
swap | swaps the contents (public member function of `std::vector<T,Allocator>`)

##### `vector<bool>` specific modifiers

flip | flips all the bits (public member function)
swap [static] | swaps two `std::vector<bool>::reference`s (public static member function)

### Non-member functions

operator==operator!=operator<operator<=operator>operator>= | lexicographically compares the values in the vector (function template)
std::swap(std::vector) | specializes the std::swap algorithm (function template)

### Helper classes

std::hash<std::vector<bool>> (C++11) | hash support for std::vector<bool> (class template specialization)

### 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 by 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`.

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/vector_bool&oldid=109324"