为什么std::vector没有.data()方法?
因为std::vector<bool>
在1个字节中存储多个值。
可以将其视为一种压缩存储系统,其中每个布尔值需要1位。因此,内存布局可能看起来像这样:
假设您想要索引一个块以获取一个值,您将如何使用运算符[]
?它不能返回bool&
(因为它将返回一个字节,该字节存储多个bools
),因此您无法将bool*
分配给它。换句话说,bool *bool_ptr =&v[0];
不是有效的代码,并将导致编译错误。data()
必须根据实现复制到预期的返回类型(或者标准应该强制执行优化而不仅仅允许它)。std::vector<bool>
并不是作为bool数组存储的,因此不能直接返回指针。它可以通过将数据复制到一个数组并返回该数组来实现,但这是一种设计选择,他们没有这样做(如果他们这样做了,我认为这适用于所有容器的data()
,这将是误导性的)。CHAR_BIT
倍。data()
将根据实现需要复制到预期的返回类型。(或者标准应该强制进行优化而不仅仅是允许它)。 - Jarod42
vector<bool>
允许通过将多个 bool 打包在一个字节中来进行空间优化。data()
将消除这种优势。 - Jarod42std::vector<bool>
有点像邀请岳母来和你同住。看起来可能是个好主意,但最终你会后悔这整个想法。幸运的是我只能责备自己犯了其中一个错误。 - Bathsheba