vector 对象是如何增长的
为了支持快速随机访问,vector 将元素连续存储——每个元素紧挨着前一个元素存储。
为了避免多次进行内存释放和分配,vector 和 string 的实现通常会分配比新的空间需求更大的内存空间,留以备用。
注意: shrink_to_fit 只是一个请求,标准库并不保证退还内存。
程序如下:
#include <iostream>
#include <vector>
#include <list>
#include <string>
using namespace std;
int main()
{
// 默认初始化容器
vector<int> ivec;
for (int i=0;i<10;i++){
ivec.push_back(i);
}
int size = ivec.size();
int cap = ivec.capacity();
cout << "the ivec's size: " << size << endl;
cout << "the ivec's capacity: " << cap << endl;
// 自主分配内存空间
vector<int> my_ivec;
my_ivec.reserve(100); // 分配能容纳100个元素的内存空间
for (int i=0;i<10;i++){
my_ivec.push_back(i);
}
int my_size = my_ivec.size();
int my_cap = my_ivec.capacity();
cout << "the my_ivec's size: " << my_size << endl;
cout << "the my_ivec's capacity: " << my_cap << endl;
// 退还剩余没用的空间
ivec.shrink_to_fit();
cout << "the ivec's capacity: " << ivec.capacity() << endl;
return 0;
}