为什么vector <bool>不是STL容器?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

vector <bool>因为它不是STL容器,它并不真正拥有bools。

以下代码:

vector <bool> v; 
bool *pb =&v[0];

不会编译,违反了STL容器的要求。

错误:

cannot convert 'std::vector<bool>::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization

vector<T>::operator []返回类型应该是T&,但为什么vector<bool>是一个特殊情况?

deque<bool> v; // is a STL container and it really contains bools

可以用作替代vector<bool>吗?

可以解释一下吗?

提问于
用户回答回答于

每个布尔需要一个字节,可以从中返回值的地址operator[]

最后要注意的是MS标准库的实现并不是最理想的,因为它使用一个很小的块大小作为deques,这意味着使用deque作为替代并不总是正确的答案。

用户回答回答于

vector<bool>包含压缩形式的布尔值,只使用一位值(而不是8)bool []数组如何操作)。在c ++中不可能返回一个位,所以有一个特殊的帮助类型“位参考”,它提供了一些内存中的接口,并允许使用标准的操作符和强制类型。

扫码关注云+社区

领取腾讯云代金券