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没有用到的过剩容量;

发布了72 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xx18030637774/article/details/82780878
今日推荐