美文网首页
C++ vector 动态增长详解

C++ vector 动态增长详解

作者: pluto_S | 来源:发表于2020-05-24 12:11 被阅读0次

    内存增长相关的四个函数

    size()、capacity()、reserve()、resize()

    • size()函数返回的是已用空间大小,
    • capacity()返回的是总空间大小,capacity()-size()则是剩余的可用空间大小。当size()和capacity()相等,说明* vector目前的空间已被用完,如果再添加新元素,则会引起vector空间的动态增长。
    • reserve(n)预先分配一块较大的指定大小的内存空间,其中n为分配空间大小;
    • resize()成员函数只改变元素的数目,不改变vector的容量。

    vector内存动态增长过程

    内存增长是编译器自动完成的。包括重新分配内存空间拷贝原空间释放原空间三个过程。
    具体策略为当添加元素时,如果vector空间大小不足,则会以原大小的1.5倍另外配置一块较大的新空间,然后将原空间内容拷贝过来,在新空间的内容末尾添加元素,并释放原空间。
    也就是说vector的空间动态增加大小,并不是在原空间之后的相邻地址增加新空间,因为vector的空间是线性连续分配的,不能保证原空间之后有可供配置的空间。

    这个动态增长过程会降低程序效率,因此可以使用reserve进行预分配空间来提高程序使用效率

    相关文章

      网友评论

          本文标题:C++ vector 动态增长详解

          本文链接:https://www.haomeiwen.com/subject/xqarahtx.html