vector对象增长容量大小测试

本文介绍了C++中vector容器的动态扩容策略,通过测试展示了在GCC和VS2013环境下,vector如何分配新内存空间。在GCC下,vector扩容为当前容量的两倍;而在VS2013中,扩容至1.5倍。此外,还提到了shrink_to_fit方法用于减少不必要的内存占用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector对象增长说明

  在C++中,vector是一个非常好用的容器,该容器大小可变,而且将元素连续储存。如果容器的储存空间已满,此时向容器中添加新元素,则容器必须分配新的内存空间来保存已有元素和新元素,将已有元素从旧位置移动到新空间中,然后添加新元素,释放旧储存空间。这样就会导致每次添加新元素时,vector就执行一次内存分配和释放操作,性能会明显的变慢。
  为了避免这种问题,标准库采用了减少容器空间重新分配次数的策略:当不得不获取新的内存空间时,vector和string的实现通常会分配比新的空间需求更大的内存空间
下面来看看测试程序,测试平台VScode + GCC:

int main()
{
    
    vector<int> a;
    cout <<"未添加元素前"<< endl;
    cout <<"vector a size: " << a.size() << endl; 
    cout <<"vector a capacity : " << a.capacity() << endl;
    cout << endl;
    //向a中添加10个元素
    for(size_t i = 0; i < 10; i++)
    {
        a.push_back(i);
    }
    cout <<"添加10个元素后"<< endl;
    cout <<"vector a size: " << a.size() << endl;
    cout <<"vector a capacity : " << a.capacity() << endl;
    cout << endl;

    
    //将capacity设置为至少20
    a.reserve(20);
    cout <<"将capacity设置为20"<< endl;
    cout <<"vector a size: " << a.size() << endl;
    cout <<"vector a capacity : " << a.capacity() << endl;
    cout << endl;

    //向a中添加元素
    while(a.size() != a.capacity())
        a.push_back(0);
    cout <<"向a中添加满元素"<< endl;
    cout <<"vector a size: " << a.size() << endl;
    cout <<"vector a capacity : " << a.capacity() << endl;
    cout << endl;

   
    //再添加一个1
    a.push_back(1);
    cout <<"待储存空间满后,再添加一个"<< endl;
    cout <<"vector a size: " << a.size() << endl;
    cout <<"vector a capacity : " << a.capacity() << endl;
    cout << endl;
    getchar();
}

其结果如下:
vector
可以发当a.size() = a.capacity()时,再向a中添加元素,vector会自动分配新的内存空间,容量是当前容量的两倍。当不想a占用这些空余的内存时,可以使用shrink_to_fit来使vector的大小与当前储存的元素数量一致,代码如下:

    a.shrink_to_fit();
    cout <<"清理多余的内存"<< endl;
    cout <<"vector a size: " << a.size() << endl;
    cout <<"vector a capacity : " << a.capacity() << endl;
    cout << endl;

结果如下图:
在这里插入图片描述
通过此次小测试(平台:VScode + GCC),说明了vector扩展内存的方式:将当前的容量进行翻倍处理

将以上程序在VS2013中测试,测试结果如下:
在这里插入图片描述
在此平台下(VS2013),vector扩展内存的方式:对当前的容量扩容至1.5倍

小结
通过上述两个测试说明vector在不同平台下,扩容方式存在差异:在GCC下是扩容至当前容量的2倍,而在vs下是扩容至当前容量的1.5倍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值