类模板特化
<vector>

std::vector<bool>

template < class T, class Alloc = allocator<T> > class vector; // generic templatetemplate <class Alloc> class vector<bool,Alloc>;               // bool specialization
布尔向量
这是一个 vector 的特化版本,用于类型为bool的元素,并为空间进行了优化。

它的行为类似于 vector 的未特化版本,但有以下变化
  • 存储空间不一定是bool值的数组,但库实现可能会优化存储,使得每个值都存储在一个比特位中。
  • 元素不是使用 allocator 对象构造的,而是直接在内部存储的相应比特位上设置其值。
  • 成员函数 flip 以及成员函数 swap 的一个新签名。
  • 一个特殊的成员类型 reference,它是一个类,通过一个模拟bool引用的接口来访问容器内部存储中的单个比特位。相反,成员类型const_reference是一个普通的bool.
  • 该容器使用的指针和迭代器类型不一定是指针或符合规范的迭代器,尽管它们应模拟其大部分预期行为。

这些变化为这个特化版本提供了一个奇特的接口,并优先考虑内存优化而非处理效率(这可能适合也可能不适合您的需求)。在任何情况下,都无法直接为bool实例化未特化的 vector 模板。避免这种情况的变通方法包括使用不同的类型(char, unsigned char)或容器(如 deque),或使用包装类型,或为特定的分配器类型进行进一步的特化。

bitset 是一个为固定大小的比特位数组提供类似功能的类。

模板参数

Alloc
用于定义存储分配模型的分配器对象的类型。默认情况下,使用allocator<bool>,它定义了最简单的内存分配模型并且与值无关。
别名为成员类型vector<bool>::allocator_type.

成员类型

成员类型定义说明
value_type第一个模板参数 (bool)
allocator_type第二个模板参数 (Alloc)默认为allocator<bool>
引用一个特殊的成员类(见下面的 reference
const_referencebool
指针一个模拟指针行为的类型随机访问迭代器,可转换为const_pointer
const_pointer一个模拟指向 const 的指针行为的类型
iterator一个模拟 随机访问迭代器 行为的类型随机访问迭代器,可转换为const_iterator
const_iterator一个模拟指向 const 的 随机访问迭代器 行为的类型
reverse_iteratorreverse_iterator<iterator>
const_reverse_iteratorreverse_iterator<const_iterator>
difference_type一个有符号整数类型相同,通常与 ptrdiff_t 一样
size_type一个无符号整数类型的无符号整数类型,通常与 size_t 一样

成员类


成员函数

该特化版本具有与未特化的 vector 相同的成员函数,除了 dataemplaceemplace_back,这些函数在此特化版本中不存在。

它增加了以下内容

非成员类特化


数据竞争

不保证对不同元素的同时访问是线程安全的(因为存储字节可能由多个比特位共享)。