c++vector(string)对象的存储

c++vector(string)对象的存储,第1张

一、vector对象是如何增长的

为了支持快速随机访问,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不会减少容器占用的内存空间

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/734531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存