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

一、vector对象是如何增长的

为了支持快速随机访问,vector将元素连续存储,同时容器的大小是可变的,那么在我们向容器中添加元素时,如果没有空间容纳新元素,那么容器只能分配新的内存空间来保存新旧元素,那么这样的性能将会非常低

为了减少空间重新分配的策略,不得不获取新的内存空间时,vector的实现通常会分配比新的空间需求更大的内存空间,容器预留这些空间作为备用

在这样的基础上,vector仍然是连续的,只不过是在vector的尾部有一部分的预留空间,因此在vector中间插入元素的时间复杂度仍旧不是O(1)

二、管理容器的成员函数

vector<int>vec;
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不会减少容器占用的内存空间

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值