**Apache C++ Standard Library User's Guide**

## 5.3 Boolean Vectors

In the C++ Standard Library, *vector*s of bit values (boolean 1/0 values) are handled as a special case, so that the values can be efficiently packed with several elements to a word. The operations for a boolean *vector*, *vector<bool>*, are a superset of those for an ordinary *vector*, only the implementation is more efficient.

One new member function added to the boolean *vector* datatype is `flip()`. When invoked, this function inverts all the bits of the *vector*. Boolean *vector*s also return as reference an internal value that also supports the `flip()` member function:

std::vector<bool> bvec(27);
bvec.flip(); // flip all values
bvec[17].flip(); // flip bit 17

The *vector<bool>* also supports an additional `swap()` member function that allows swapping the values indicated by a pair of references:

bvec.swap(bvec [17], bvec [16]);