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