为什么vector.reserve(2)后跟v [0] = 2被认为是不正确的?

时间:2012-11-22 02:11:41

标签: c++ memory stl vector

所以根据我的理解,reserve不会初始化抽象,只是简单地分配空间以包含它们。但是不应该v [0]总是给你第一个单位化的记忆,不应该给它分配值总是有用吗?

2 个答案:

答案 0 :(得分:9)

因为reserve不会改变矢量的大小。它只将向量移动到内存中的某个位置,在该位置有足够的空间允许向量的大小在必要时增加。

如果您想确定可以致电v[0]=2,甚至是v[1]=0,则应使用resize(2),而不是reserve(2)

答案 1 :(得分:1)

因为它调用未定义的行为。库编写者可以合法地将begin()的地址保留为nullptr,直到您调整大小。或者将其设置为0xBAADFOOD。或者在写入时格式化硬盘。

现在,更有可能发生的是这是未初始化的内存。因此,除了调试中的一堆断言之外,没有任何可怕的事情发生,以及向量处于其状态而无法修复它的事实。