std :: vector <bool>保证将所有条目默认为false?

Jos*_*ain 13 c++ vector

我希望在将std :: vector调整为所需的容器大小后,我的std :: vector中的所有条目都为false.这似乎是测试的情况,但我似乎无法找到任何保证始终如此的文档.

我意识到我可以将自己设置为假,但如果已经保证每个条目默认为false(这是一个体面的大小的矢量,并且将在数千个地方创建),这似乎效率低下.

这有什么保证吗?提前致谢.

use*_*267 22

resize 将默认插入元素,通过(C++ 11)标准调用:

allocator_traits<bool>::construct(m, p)

m分配器在哪里,并p指向目标地址.

这反过来(假设m是标准分配器)调用

m.construct(p)

反过来打电话

::new((void *)p) bool()

所以你bool最终会被初始化,这bool意味着零初始化,这意味着false.

如果m是自定义分配器并且由于某种原因缺失construct(),它仍然最终被初始化.


正如已经指出的那样std::vector<bool>,不使用标准分配器,仍然resize()被定义为

void resize(size_type sz, bool c = false);

所以结果是一样的.

  • @TonyD可以理解,我现在已经编辑了我的答案.为了将来参考,我认为您可以单击相同的箭头以撤消+/- 1. (2认同)
  • @user657267:最好将最相关的信息放在顶部,并将“顺便说一句,除 bool 之外的类型的向量...”作为最后的奖励部分。无论如何,我+1,感谢您重新投票的提示...太酷了!干杯。 (2认同)

Bas*_*tch 5

是的,astd::vector<bool>是用零字节初始化的,在大多数机器上这是false(初始化 -s 的默认值bool)。

请参阅std::vector上的注释

  • `bool()` 是默认值,在所有 C++ 系统上都是 false,但不是大多数。 (2认同)