vector当增加元素达到上限的时候,会动态的扩容。以下进行实验(VS2013编辑器)。
(这个扩容,在vs下面的扩容是1.5倍,,在linux gcc下面的扩容应该是2倍的,见下面转载的链接)
#include <iostream>
#include <vector>
using namespace std;
void printSizeCapacity(vector<int>& ivec)
{
cout << "size: " << ivec.size() << "\t capacity: " << ivec.capacity() << endl;
}
int main()
{
vector<int> ivec;
cout << "\nadd 20 elements step by step" << endl;
for (int i = 0; i < 20; i++) {
printSizeCapacity(ivec);
ivec.push_back(0);
}
vector<int>().swap(ivec);
printSizeCapacity(ivec); //可以发现经过上面的swap释放以后,vector<>的capacity占用空间发小为0.
cout << "\ncall reserve() to make the vector grow to 50 elements" << endl;
ivec.reserve(50);
while (ivec.size() != ivec.capacity()) {
ivec.push_back(0);
}
printSizeCapacity(ivec);
cout << "\nadd 1 element" << endl;
ivec.push_back(0);
printSizeCapacity(ivec);
cout << "\ncall shrink_to_fit()" << endl;
ivec.shrink_to_fit();
printSizeCapacity(ivec);
system("pause");
return 0;
}