前言
当对初始状态下的容器中的指定元素进行随机访问时,可能会出现数组越界的问题。因此常在随机访问前调用resize函数修改大小。
但使用resize可能会对容器末尾的元素进行增删操作(详情请参考另外一篇文章:resize函数问题)
我们知道,使用reserve函数可以修改容器的capacity值(即容量值),那么我们是否可以通过修改capacity值替代size值避免访问越界问题呢?
答案是不可以。
分析
1. 单独修改容器的capacity,不能改变容器中元素个数
请看如下代码:
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> a;
a.reserve(10);
a[9] = 100;
cout << "a.size()=" << a.size() << endl;
cout << "a.capacity()=" << a.capacity() << endl;
return 0;
}
输出结果为
a.size()=0
a.capacity()=10
可以看到,虽然我们将a[9]
的值进行了修改,但是容器的size
值依旧显示为0。
2. 网传使用reserve函数,只是预置了容器大小,并不会分配内存
以下是一段网传的文字:
size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存。
当然这与我在C++官方文档中看到的并不一样,我也没能印证这个观点,因此这个观点做保留,仅作参考。
综上所述,不能使用reserve函数替代resize函数避免随机访问越界问题。
注意:以上提高的特指C++STL中具有顺序存储结构的容器。
参考资料
原创不易,感谢支持。