为什么不能访问vector :: reserve分配的内存

Fra*_*era -3 c++

很简单的问题,但为什么当你打电话时

std::vector<int> vec;
vec.reserve(100);
vec[89] = 99; // vector subscript out of range.-
Run Code Online (Sandbox Code Playgroud)

您不能访问向量的0-99元素?考虑到保留向量的增加容量(分配了那个大小的新数组)并且你应该能够访问这些元素,即使它们是空的或者为空启动,也没有多大意义.

我明白,如果你这样做的方式如下:

std::vector<int> vec(99, 0);
vec[89] = 99;
Run Code Online (Sandbox Code Playgroud)

您将被允许访问元素,因为它们将被初始化为0,但是,除了最初通过构造函数之外,您不能使用这样的默认值多次调整向量.

使用数组,可以做到:

int[] arr = new int[100];
arr[89] = 99;
Run Code Online (Sandbox Code Playgroud)

当然,您必须自己编写调整大小.

arr1 = new int[200]
memcpy (arr1, arr, 100);
arr = arr1;
arr[90] = 100;
Run Code Online (Sandbox Code Playgroud)

std::vector一旦达到一定的容量,有没有办法像对待自己调整大小的数组一样?

Amx*_*mxx 7

你不应该混淆resizereserve

  • reserve 分配空间(如果需要)但不初始化它,这样当你插入新元素时,只调用构造并且不进行重新定位(直到你使用了所有保留的空间)
  • resize 分配空间(如果需要)并通过调用构造函数初始化它.

因此,当您使用reserve空格时,在通过执行类似push_back或的操作初始化/构造新值之前,无法访问新值resize