vector v;
v.reserve(10000);
// 注,reserve预留空间,但不创建对象
// 即在push_back或insert前不可以直接引用。
// 区别于resize(),resize()会创建对象。
for(int i = 0; i < 10000; i++){
v.push_back(i);
}
在Scott Meyers的书中给出了解释:
对于vector和string,在需要更多空间时,会做与realloc等效的事情,步骤如下:
1,分配一个新内存块,其容量时当前容量的数倍。多数实现中,vector和string容量提升因子在1.5至2之间。
2,将原内存中数据拷贝至新内存(很费时间)。
3,释放原有内存对象。
4,释放原有内存。
vector v;
v.push_back(1);
size_t c = v.capacity();
printf("%lu\n",c);
//
vector().swap(v);
//
size_t d = v.capacity();
printf("%lu\n",d);
erase()或clear()不会减少vector的内存。
vector v1;
vector v2;
v2 = v1;
v2.insert(v2.end(),v1.begin(),v1.end());
vector v;
for(auto p = v.begin(); p != v.end(); p++);
for(vector p = v.begin(); p != v.end(); p++);
for(unsigned i = 0; i < v.size(); i++);
vector v;
v.insert(v.begin(), 1);
list l;
l.push_front(1);