vector会预先分配比当前数据大的一个空间,如果有新的元素进来填满了这个空间,就又会继续分配。
分配策略一般是1,2,4,8,16...
直接上代码:
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <list>
#include <string>
using namespace std;
class Point
{
public:
Point()
{
cout << "construction" << endl;
}
Point(const Point& p)
{
cout << "copy construction" << endl;
}
~Point()
{
cout << "destruction" << endl;
}
};
int main(int argc, const char * argv[])
{
Point test[10];
cout << "**************************" << endl;
vector<Point> arr;
for (int i = 0; i < 10; i++)
{
arr.push_back(test[i]);
cout << "capacity=" << arr.capacity() << ",size=" << arr.size() << endl;
cout << "--------------------------" << endl;
}
return 0;
}
结果:
construction
construction
construction
construction
construction
construction
construction
construction
construction
construction
**************************
copy construction
capacity=1,size=1
--------------------------
copy construction
copy construction
destruction
capacity=2,size=2
--------------------------
copy construction
copy construction
copy construction
destruction
destruction
capacity=4,size=3
--------------------------
copy construction
capacity=4,size=4
--------------------------
copy construction
copy construction
copy construction
copy construction
copy construction
destruction
destruction
destruction
destruction
capacity=8,size=5
--------------------------
copy construction
capacity=8,size=6
--------------------------
copy construction
capacity=8,size=7
--------------------------
copy construction
capacity=8,size=8
--------------------------
copy construction
copy construction
copy construction
copy construction
copy construction
copy construction
copy construction
copy construction
copy construction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
capacity=16,size=9
--------------------------
copy construction
capacity=16,size=10
--------------------------
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction