C++ STL中的容器预留空间和重新设置大小的区别
在C++ STL中,vector、deque、string等容器本质上是动态数组,它们可以随着数据的插入、删除自动改变大小。而为了提高程序效率,我们通常会事先预留一定的空间,可以使用reserve()函数实现。
但是,有时候我们需要更改已经存储的元素的数目,这时就需要用到resize()函数。相比之下,reserve()函数只是为容器预留空间,并不改变容器的大小,resize()则在预留空间的基础上直接修改容器的大小。
在具体使用时,我们需要根据不同的需求来选择合适的函数。下面通过一些例子来说明两者的区别:
reserve()函数的使用
reserve()函数用于在预留一定空间后,不改变容器的大小,仅仅将容器的容量调整为预分配的大小。这样可以减少不必要的内存申请和释放,从而提高程序效率。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> nums;
nums.reserve(10);
cout << "capacity: " << nums.capacity() << endl;
for (int i = 0; i < 10; ++i) {
nums.push_back(i);
cout << "capacity: " << nums.capacity() <<