C++ 参考手册
- C++11
 - C++14
 - C++17
 - C++20
 - C++ 编译器支持情况表
 - 独立与宿主实现
 - C++ 语言
 - C++ 关键词
 - 预处理器
 - C++ 标准库头文件
 - 具名要求
 - 功能特性测试 (C++20)
 - 工具库
 - 类型支持(基本类型、RTTI、类型特性)
 - 概念库 (C++20)
 - 错误处理
 - 动态内存管理
 - 日期和时间工具
 - 字符串库
 - 容器库
 - std::array
 - std::vector
 - std::map
 - std::unordered_map
 - std::priority_queue
 - std::span
 - std::forward_list
 - std::deque
 - std::list
 - std::set
 - std::multiset
 - std::multimap
 - std::unordered_set
 - std::unordered_multiset
 - std::unordered_multimap
 - std::stack
 - std::queue
 - std::vector<bool>
 - std::hash (std::vector<bool>)
 - 结点把柄 (C++17)
 - 注释
 - 迭代器库
 - 范围库 (C++20)
 - 算法库
 - 数值库
 - 输入/输出库
 - 文件系统库
 - 本地化库
 - 正则表达式库
 - 原子操作库
 - 线程支持库
 - 实验性 C++ 特性
 - 有用的资源
 - 索引
 - std 符号索引
 - 协程支持 (C++20)
 - C++ 关键词
 
std::vector<bool>
|   定义于头文件  <vector>
  | 
||
|   template<class Allocator>  class vector<bool, Allocator>;  | 
||
std::vector<bool> 是 std::vector 对类型 bool 为空间提效的特化。
std::vector<bool> 中对空间提效的行为(以及它是否有优化)是实现定义的。一种潜在优化涉及到 vector 的元素联合,使得每个元素占用一个单独的位,而非 sizeof(bool) 字节。
std::vector<bool> 表现类似 std::vector ,但为节省空间,它:
- 不必作为连续数组存储元素
 - 暴露类 std::vector<bool>::reference 为访问单个位的方法。尤其是,此类型的类为 operator[] 以值返回。
 - 不使用 std::allocator_traits::construct 构造位值。
 - 不保证同一容器中的不同元素能由不同线程同时修改。
 
成员类型
| 成员类型 | 定义 | 
  value_type
 | 
bool | 
  allocator_type
 | 
  Allocator  | 
  size_type
 | 
实现定义 | 
  difference_type
 | 
实现定义 | 
|    表示到单个 bool 的引用的代理类  (类)  | |
  const_reference
 | 
bool | 
  pointer
 | 
实现定义 | 
  const_pointer
 | 
实现定义 | 
  iterator
 | 
实现定义 | 
  const_iterator
 | 
实现定义 | 
  reverse_iterator
 | 
std::reverse_iterator<iterator> | 
  const_reverse_iterator
 | 
std::reverse_iterator<const_iterator> | 
成员函数
  构造 vector ( std::vector<T,Allocator> 的公开成员函数)  | |
  析构 vector ( std::vector<T,Allocator> 的公开成员函数)  | |
|    赋值给容器   ( std::vector<T,Allocator> 的公开成员函数)  | |
|    将值赋给容器   ( std::vector<T,Allocator> 的公开成员函数)  | |
|    返回相关的分配器   ( std::vector<T,Allocator> 的公开成员函数)  | |
 元素访问 | |
|   访问指定的元素,同时进行越界检查   ( std::vector<T,Allocator> 的公开成员函数)  | |
|    访问指定的元素   ( std::vector<T,Allocator> 的公开成员函数)  | |
|   访问第一个元素  ( std::vector<T,Allocator> 的公开成员函数)  | |
|    访问最后一个元素   ( std::vector<T,Allocator> 的公开成员函数)  | |
 迭代器 | |
|    返回指向容器第一个元素的迭代器   ( std::vector<T,Allocator> 的公开成员函数)  | |
|   返回指向容器尾端的迭代器   ( std::vector<T,Allocator> 的公开成员函数)  | |
|   返回指向容器最后元素的逆向迭代器   ( std::vector<T,Allocator> 的公开成员函数)  | |
|    返回指向前端的逆向迭代器   ( std::vector<T,Allocator> 的公开成员函数)  | |
 容器 | |
|    检查容器是否为空   ( std::vector<T,Allocator> 的公开成员函数)  | |
|    返回容纳的元素数   ( std::vector<T,Allocator> 的公开成员函数)  | |
|   返回可容纳的最大元素数  ( std::vector<T,Allocator> 的公开成员函数)  | |
|    预留存储空间   ( std::vector<T,Allocator> 的公开成员函数)  | |
|    返回当前存储空间能够容纳的元素数   ( std::vector<T,Allocator> 的公开成员函数)  | |
 修改器 | |
|   清除内容  ( std::vector<T,Allocator> 的公开成员函数)  | |
|   插入元素  ( std::vector<T,Allocator> 的公开成员函数)  | |
|    (C++14 起)  | 
   原位构造元素   ( std::vector<T,Allocator> 的公开成员函数)  | 
|   擦除元素  ( std::vector<T,Allocator> 的公开成员函数)  | |
|    将元素添加到容器末尾  ( std::vector<T,Allocator> 的公开成员函数)  | |
|    (C++14)  | 
   在末尾原位构造元素  ( std::vector<T,Allocator> 的公开成员函数)  | 
|   移除末元素  ( std::vector<T,Allocator> 的公开成员函数)  | |
|    改变容器中可存储元素的个数   ( std::vector<T,Allocator> 的公开成员函数)  | |
|    交换内容   ( std::vector<T,Allocator> 的公开成员函数)  | |
    
 | |
|   翻转所有位  (公开成员函数)  | |
|    [静态]  | 
   交换二个 std::vector<bool>::reference (公开静态成员函数)  | 
非成员函数
|    (C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20)  | 
   按照字典顺序比较 vector 中的值  (函数模板)  | 
|    特化 std::swap 算法  (函数模板)  | |
|   擦除所有满足特定判别标准的元素  (函数模板)  | 
辅助类
|    (C++11)  | 
   std::vector<bool> 的哈希支持  (类模板特化)  | 
推导指引(C++17)
注解
若位集的大小在编译时已知,可使用 std::bitset ,它提供一组更丰富的成员函数。另外, boost::dynamic_bitset 作为 std::vector<bool> 的替用者存在。
因为 std::vector<bool> 的表示可以优化,故它不需要满足所有容器 (Container) 或序列容器 (SequenceContainer) 要求。例如,因为 std::vector<bool>::iterator 是实现定义的,故它可以不满足遗留向前迭代器 (LegacyForwardIterator) 要求。使用要求遗留向前迭代器 (LegacyForwardIterator) 的算法,例如 std::search 可能导致编译时或运行时错误。
vector 的 Boost.Container 版本不对 bool 特化。