访问 vector 的 data()[i]
对于超出 vector 的 size()
和 vector 的 的索引
?i
是否安全容量()
这是我的推理:
a) 根据cplusplus , capacity()
是“当前为 vector 分配的存储空间的大小”,这让我觉得我的问题的答案是YES
,但是随后
b) 使用 reserve()
并访问超出 vector 的 size()
的 data
应该是安全的,因为根据 cplusplus , reserve()
“导致容器重新分配其存储空间,将其容量增加到 n”,但是随后
c) Stackoverflow topic与上面的语句 b)
所以我很困惑,正在寻找答案。
最佳答案
如果 n >= size()
,则访问 data()[n]
无效。每[vector.data] std::vector::data
Returns: A pointer such that
[data(), data() + size())
is a valid range. For a non-empty vector,data() == addressof(front())
.
所以只有在[0, size())
范围内访问data
才有效。
通常 data() + size() - 1
和 data + capacity()
之间的内存未初始化。如果您从未定义行为的未初始化内存中读取。如果您有一个具有非平凡初始化的对象,那么您甚至无法为其分配一个值,因为该位置实际上没有对象,只有一个空间。你可能会在未初始化的范围内做事,但你违反了与 std::vector
的契约(Contract),如果你这样做可能会生气;)
关于C++ 访问 vector 超出 size() 和低于 capacity(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53749409/