vector的空间相关操作

vector空间的动态增长

当我们向vector中添加元素时,如果vector空间大小不足,则会以原大小的两倍另外配置一块较大的新空间,然后将原空间的内容拷贝过来,在新空间的内容末尾添加元素,并释放原空间

vector的空间动态增加大小,并不是在原空间之后的相邻地址增加新空间,因为vector的空间是线性连续分配的,并不能原空间之后的可供配置的空间

因此,对vector的任何操作,一旦引起空间的重新配置,指向原vector的所有迭代器就会失效。

对于一个vector的对象,内存的分布如下图:
在这里插入图片描述
从上往下看:

  • start迭代器指向已有空间的首元素。
  • finish迭代器指向已用空间的尾元素的下一个位置。
  • end_of_storage指向可用空间的末尾。

就函数而言:

  • size()函数返回的是已用空间的大小。
  • capacity ()函数返回的是总空间的大小。
  • capacity() - size() 则是剩余的可用空间大小。
  • 当size()和capacity()相等,说明vector目前的空间已经用完。如果再添加元素,就会引起vector空间的动态增长。
  • resize() 成员函数只改变元素的数目,不改变vector的容量。

由于动态增长会引起动态分配内存空间、拷贝原空间、释放原空间,这些过程会降低效率。因此,可以使用reserve(n) 预先分配一块较大的指定大小的内存空间,这样当指定大小的内存空间未使用完时,是不会重新分配内存空间的。这样提升了效率,只有当n>capacity()时,调用reserve(n)才会改变vector的容量。

小结

  • 空的vector对象,size()和capacity()都为0。
  • 当空间大小不足时,新分配的空间大小为原先的2倍。
  • 使用reserve(n)预先分配一块内存时,在空间未满的的情况下,不会引起重新分配,从而可以提高效率。
  • 当reserve()分配的空间比原空间小时,是不会引起重新分配的。
  • resize()函数只改变容器的元素数目,未改变容器大小。

vector空间的动态增长

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值