《c++ primer》 9.4
问题:vector储存元素在内存中是要连续存放的,假如要向其中添加元素则容器每次要申请新空间存放原来的元素和新元素并且释放原来的空间。对性能影响极大。
策略:为了避免这种情况,标准库的实现者采用的方式是当要申请空间时,申请的比所需的空间大的空间作为备用。
reserve(int) 设置不重新申请内存,容器可以存放的元素个数
capacity() 获取容器可以存放的元素个数
shrink_to_fit() 将capacity()减少为与size()相同的大小,要求归还多余的内存
std::vector<int> vec;
vec.reserve(10);//设置不重新申请内存,此容器可以存放的元素个数 即vec.capacity()结果是10
qDebug() << vec.capacity() << endl;
for(int i = 0; i < 15; ++ i)
{
vec.push_back(i);
qDebug() <<"i = "<<i<< vec.capacity();
}
qDebug() << vec.size() << endl;
vec.shrink_to_fit();//将capacity()减少为与size()相同的大小
qDebug() << vec.size() << vec.capacity();
当元素个数大于初始设置的最低存放10个元素的时候才会申请增加空间。