很简单的问题,但为什么当你打电话时
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一旦达到一定的容量,有没有办法像对待自己调整大小的数组一样?
你不应该混淆resize和reserve
reserve 分配空间(如果需要)但不初始化它,这样当你插入新元素时,只调用构造并且不进行重新定位(直到你使用了所有保留的空间)resize 分配空间(如果需要)并通过调用构造函数初始化它.因此,当您使用reserve空格时,在通过执行类似push_back或的操作初始化/构造新值之前,无法访问新值resize