table of Contents
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?