为了支持快速随机访问,vector将元素连续存储---每个元素紧挨着前一个元素存储。
如果没有空间容纳新元素:
- 容器必须分配新的内存空间来保存已有元素和新元素,将已有元素从旧位置移动到新空间中,然后添加新元素,释放旧存储空间。
- vector和string的实现通常会分配比新的空间需求更大的内存空间。容器预留这些空间作为备用,可以用来保存更多的新元素。
管理容器的成员函数
- capacity操作告诉我们容器在不扩张内存空间的情况下可以容纳多少个元素。
- reverse操作允许我们通知容器它应该准备保存多少个元素。
capacity和size
- size是指它已经保存的元素的数目;
- capacity是在不分配新的内存空间的前提下它最多可以保存多少个元素。
int main()
{
vector<int> a;
for(int i = 0; i < 24; ++ i) a.push_back(i);
cout << a.size() << endl; //输出size为24
cout << a.capacity() << endl; //输出capacity为32,capacity大于等于size
return 0;
}
Note:每个vector实现都可以选择自己的内存分配策略。但是必须遵守的一条原则是:只有当迫不得已时才可以分配新的内存空间。