C/C++之vector的内存管理和效率

     (1)vector容器支持随机访问,其内部是通过动态数组实现的;

     (2)当vector执行insert或者push_back时,如果此时动态数组的内存不够用,则会重新分配当前大小的1.5~2倍的新内存区,把原来数组的内容复制过去;

     (3)为了减少动态数组的不断分配,通过采用reverse()来提前设定容器的大小。

     (4)每一次容器进行扩容的时候,原容器内的内存,迭代器,指针和引用都会失效;

     (5)标准容器的四个成员函数(vector和string)

             1)size()函数:获得容器中元素的个数;

             2)capacity()函数:容器在分配那块内存上可以容纳的元素的个数;

            3)resize(n)函数:强制将容器改为容纳为n个数据;调用之后函数返回为n,如果n小于当前大小,容器尾部元素被销毁;如果n大于当前大小,新构造的元素会添加到末尾;如果n大于当前容量,在元素加入前会进行重新分配;

            4)reserve(n):强制容器把它的容量改为不小于n,提供的n不小于当前所需大小。如果n小于当前容量,则vector会忽略它,什么都不调用,string可能会把它的容量减小为size()和n中的大数,但是string的大小不变;

       (6)使用“交换技巧”来修整vector过剩空间/内存

                      使用语句:vector<int>(ivec).swap(ivec);

                           vector<Int>(ivec)表示建立一个临时的vector,它是ivec的一份拷贝,但是vector的拷贝构造函数只分配拷贝的元素需要的内存,所以这个临时的vector没有多余的容量,然后再实现vector和ivec交换数据万能充,但是ivec只有临时变量修整后的容量,而临时变量拥有曾经ivec没有用到的过剩容量;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值