命名空间
变体
操作

std::vector<bool>

来自 cppreference.com
< cpp‎ | 容器
 
 
 
 
定义在头文件 <vector>
template<

    class Allocator

> class vector<bool, Allocator>;

std::vector<bool>std::vector 针对类型 bool 的一种可能的空间效率较高的特化。

std::vector<bool> 的空间效率提升方式 (以及它是否被优化) 是实现定义的。一种可能的优化方案是合并向量元素,以便每个元素占用一个比特,而不是 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

实现定义的

(直到 C++20)

实现定义的 ConstexprIterator

(自 C++20 起)
[编辑]
const_iterator

实现定义的

(直到 C++20)

实现定义的 ConstexprIterator

(自 C++20 起)
[编辑]
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> 的公共成员函数) [编辑]
(C++11)
返回指向结束位置的迭代器
(std::vector<T,Allocator> 的公共成员函数) [编辑]
返回指向开始位置的反向迭代器
(std::vector<T,Allocator> 的公共成员函数) [编辑]
(C++11)
返回指向结束位置的反向迭代器
(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++11)
在指定位置构造元素
(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> 的公共成员函数) [编辑]
vector<bool> 特定的修改器
翻转所有位
(公共成员函数) [编辑]
[static]
交换两个 std::vector<bool>::reference
(公共静态成员函数) [编辑]

[编辑] 非成员函数

(C++20 中已移除)(C++20 中已移除)(C++20 中已移除)(C++20 中已移除)(C++20 中已移除)(C++20)
按字典序比较两个 vector 的值
(函数模板) [编辑]
专门化了 std::swap 算法
(函数模板) [编辑]
删除满足特定条件的所有元素
(函数模板) [编辑]

[编辑] 辅助类

std::vector<bool> 的哈希支持
(类模板特化) [编辑]

[编辑] 推断指南 (C++17)

[编辑] 注意事项

如果位集的大小在编译时已知,则可以使用 std::bitset,它提供了更丰富的成员函数集。此外,boost::dynamic_bitset 作为 std::vector<bool> 的替代方案存在。

由于它的表示形式可能经过优化,因此 std::vector<bool> 不一定满足所有 ContainerSequenceContainer 要求。例如,由于 std::vector<bool>::iterator 是实现定义的,因此它可能不满足 LegacyForwardIterator 要求。使用 std::search 等需要 LegacyForwardIterator 的算法可能导致 编译时或运行时错误

Boost.Container 版本的 vector 不会专门针对 bool 进行专门化。

[编辑] 注意事项

特性测试 Std 特性
__cpp_lib_containers_ranges 202202L (C++23) 容器的范围构造和插入

[编辑] 缺陷报告

以下行为更改缺陷报告已追溯应用到以前发布的 C++ 标准。

DR 应用于 发布的行为 正确行为
LWG 2187 C++11 针对 bool 的特化缺少 `emplace` 和 `emplace_back` 成员函数 添加了