C++ vector对象是如何增长的

为了支持快速随机访问,vector将元素连续存储---每个元素紧挨着前一个元素存储。

如果没有空间容纳新元素:

  1. 容器必须分配新的内存空间来保存已有元素和新元素,将已有元素从旧位置移动到新空间中,然后添加新元素,释放旧存储空间。
  2. vector和string的实现通常会分配比新的空间需求更大的内存空间。容器预留这些空间作为备用,可以用来保存更多的新元素。

管理容器的成员函数

  1. capacity操作告诉我们容器在不扩张内存空间的情况下可以容纳多少个元素。
  2. reverse操作允许我们通知容器它应该准备保存多少个元素。

capacity和size

  1. size是指它已经保存的元素的数目;
  2. 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实现都可以选择自己的内存分配策略。但是必须遵守的一条原则是:只有当迫不得已时才可以分配新的内存空间。

原文地址:https://www.cnblogs.com/xiaobaizzz/p/12169353.html