std::
vector<bool>
类模板特化 <vector>
template < class T, class Alloc = allocator<T> > class vector; // generic template
template <class Alloc> class vector<bool,Alloc>; // bool specialization
bool向量
这是vector的特化版本,用于bool类型的元素,并对空间进行了优化。
-
它的行为类似于vector的非特化版本,有以下更改:
-
存储不一定是bool值数组,但标准库实现可以优化存储,使每个值存储在单个位中。
-
元素不是使用allocator对象构造的,而是直接在内部存储中的适当位上设置它们的值。
-
成员函数flip和成员swap。
-
一种特殊的成员类型, reference,通过模拟bool引用的接口访问容器内部存储中的单个bits的类。
相反,成员类型const_reference是普通的bool类型。
-
容器使用的指针和迭代器类型可能既不是指针也不是符合标准的迭代器,尽管它们可以模拟预期的大部分行为。
这些更改为这种特化提供了一个奇特的接口,有利于内存优化而不是处理(这可能适合也可能不适合您的需要)。
在任何情况下,都不可能直接实例化bool的vector的非特化模板。避免使用不同类型(char、unsigned char)或容器
(如deque)来使用包装器类型或进一步特化特定分配器类型的变通方法。
Bitset是一个类,它为固定大小的位数组提供了类似的功能。
☲ 模板参数
-
Alloc
-
相用于定义存储分配模型的allocator对象的类型。默认情况下,
使用allocator<bool>,它定义了最简单的内存分配模型,并且是值独立的。
别名为成员类型 vector<bool>::allocator_type。
☉ 成员类型
成员类型 |
定义 |
注释 |
value_type |
第一个模板形参(bool) |
|
allocator_type |
第二个模板参数(Alloc) |
默认为: allocator< bool > |
reference |
一个特定的成员类(参见下面的参考资料) |
|
const_reference |
bool |
|
pointer |
一种模拟指针行为的类型 |
可转换到const_pointer |
const_pointer |
模拟指向const指针的类型 |
|
iterator |
模拟随机访问迭代器行为的类型 |
可转换到const_iterator |
const_iterator |
模拟到const行为的随机访问迭代器的类型 |
|
reverse_iterator |
reverse_iterator<iterator> |
|
const_reverse_iterator |
reverse_iterator<const_iterator> |
|
difference_type |
带符号整型 |
通常与ptrdiff_t相同 |
size_type |
无符号整型 |
通常与size_t相同 |
☲ 成员类
vector<bool>::reference |
引用类型(公众成员类) |
✥ 成员函数
特化与非特化向量具有相同的成员函数,除了该特化中不存在的data、emplace和emplace_back。
它增加了以下内容:
flip |
翻转位(公众成员函数) |
swap |
交换容器或元素(公众成员函数) |
☣ 非会员类特化
hash<vector<bool>> |
散列向量(类模板特化) |
⇄ 数据竞争
不能保证同时访问不同的元素是线程安全的(因为存储字节可能由多个位共享)。