9.4 vector对象是如何增长的

        vector中元素是连续存储的,因此原则上每添加一个元素,都要重新开辟一段存储空间,并将原来存储空间的值拷贝过来,末尾再加上新添加的元素,这样效率是非常低的。因此,为了提高效率只能牺牲内存了:每次开辟存储空间时,开辟的空间能容纳的元素个数大于等于实际已有的元素的个数,这样只要添加元素后元素的总个数没有超过此前开辟的存储空间能容纳的元素个数,就不用重新开辟新内存啦!

        为了让用户更好的理解和使用vector的这一特性,vector提供了几个接口:vec.size()返回vector中已有元素的个数;vec.capacity()返回vector中已开辟的内存能存储的元素个数(当然是大于等于vec.size()啦);vec.reserve(n)设置vector的内存为能存储n个元素的空间大小,注意只有当n大于vec原来的capacity时,此操作才真正执行(也就是说reserve不能减小vector的capacity),而且执行后实际的capacity是大于等于n的;vec.shrink_to_fit()将vector的capacity设置为跟size一样大小,也就是不让vector有多余的内存。

        向vector添加元素,如果添加后元素的个数小于等于该vector的capacity(也就是存储空间够用),就不会开辟新的内存;如果添加后元素的个数大于vector的capacity,则开辟新的内存,并按一定规则增大capacity(什么规则看vector的实现)。

        string和vector一样,因为string就是一种特殊的保存字符的vector。而deque呢,可以用shrink_to_fit,而不能用reserve和capacity,至于什么原因跟它存储元素的方式有关,具体什么我也不懂!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值