在 vector 的data()[i]之外和 vector 的i下访问索引size()的 vector capacity()是否安全?

这是我的理由:

a)根据cpluspluscapacity()是“当前为 vector 分配的存储空间的大小”,这使我认为问题的答案是YES,但是

b)使用reserve()并访问vector的data之外的size()应该是安全的,因为根据cplusplusreserve()“导致容器重新分配其存储,将其容量增加到n”,但是

c)Stackoverflow topic与上面的b)语句矛盾

所以我很困惑,正在寻找答案。

最佳答案

如果使用data()[n],则访问n >= size()无效。每个[vector.data] std::vector::data


因此,仅使用data范围内的值访问[0, size())是有效的。

通常,然后data() + size() - 1data + capacity()之间的内存未初始化。如果您从该未初始化的内存中读取,则为未定义的行为。如果您的对象具有非平凡的初始化,那么您甚至无法为其分配值,因为在该位置实际上没有对象,而只有一个空间。您可能可以在未初始化的范围内执行操作,但是您违反了std::vector的约定,如果这样做,可能会很生气;

关于c++ - C++访问 vector 超出size()且低于Capacity(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53749409/

10-10 20:00
查看更多