为了支持快速随机访问,vector将元素连续存储,同时容器的大小是可变的,那么在我们向容器中添加元素时,如果没有空间容纳新元素,那么容器只能分配新的内存空间来保存新旧元素,那么这样的性能将会非常低
为了减少空间重新分配的策略,不得不获取新的内存空间时,vector的实现通常会分配比新的空间需求更大的内存空间,容器预留这些空间作为备用
在这样的基础上,vector仍然是连续的,只不过是在vector的尾部有一部分的预留空间,因此在vector中间插入元素的时间复杂度仍旧不是O(1)
二、管理容器的成员函数vectorvec;
for (int i = 0; i < 100; i++)
{
vec.push_back(1);
cout << vec.capacity() << '\n'; //表示当前vec的容量
}
cout << "#####" << '\n';
vec.shrink_to_fit(); //将容量减小为size同大小
cout << vec.capacity() << '\n';
vec.reserve(200); //分配至少能容纳n个元素的内存空间
cout << vec.capacity() << '\n';
vec.reserve(50);
cout << vec.capacity() << '\n';
//shrink_to_fit只适用于vector string deque
//capacity reserve只适用于vector string
只有当需要的内存空间超过当前容量时,reserve调用才会改变vector的容量,如果需求大小(size)大于当前容量时,reserve至少分配与需求一样大的内存空间,因此调用reserve不会减少容器占用的内存空间
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)