Analysis of std::vector expansion

The principle of vector expansion in STL

  • New elements: vector stores elements in a continuous array. If the array is full, you need to reallocate a piece of memory, copy the original data to the new memory, release the previous memory, and then insert the new element;
  • When the object of vector is constructed, its capacity is 0. After the first element of push_back or insert, its capacity becomes 1;
  • When deleting elements of the vector, its capacity will not change;
  • The expansion method of GCC under Linux is 2 times expansion;

Code example

#include<iostream>
#include<vector>

using namespace std;

int main(int argc, char** argv)
{
    
    
  vector<int> datas;
  cout << "vector datas capacoity: " << datas.capacity() << endl;
  for(int i = 0; i < 10; i++){
    
    
    datas.push_back(i);
    cout << "vector datas size: " << datas.size() << endl;
    cout << "vector datas capacity: " << datas.capacity() << endl;
  }
    //移除3个元素
    datas.erase(datas.begin()+2, datas.begin()+5);
    cout << "after erase, vector datas size: " << datas.size() << endl;
    cout << "after erase, vector datas capacity: " << datas.capacity() << endl;

  return 0;
}

//输出结果
vector datas capacoity: 0
vector datas size: 1
vector datas capacity: 1
vector datas size: 2
vector datas capacity: 2
vector datas size: 3
vector datas capacity: 4
vector datas size: 4
vector datas capacity: 4
vector datas size: 5
vector datas capacity: 8
vector datas size: 6
vector datas capacity: 8
vector datas size: 7
vector datas capacity: 8
vector datas size: 8
vector datas capacity: 8
vector datas size: 9
vector datas capacity: 16
vector datas size: 10
vector datas capacity: 16
//发现当vector中的数据删除是不会影像其capacity的
after erase, vector datas size: 7
after erase, vector datas capacity: 16

I know there is a memory expansion about C++ STL:
After the vector memory in C++ STL is used up, why is it doubled every time instead of 3 times or other values?

Guess you like

Origin blog.csdn.net/CFH1021/article/details/104894154