vector效率测试代码

本文通过实际代码展示了C++中vector容器的性能测试,探讨了不同操作对vector效率的影响,包括插入、删除、扩容等常见操作,为后端开发提供优化参考。
摘要由CSDN通过智能技术生成

#include "..\..\include\stlExample\Containers.h"
#include "..\..\include\stlExample\StopWatch.h"
//#include "StopWatch.h"
#include <iostream>
#include <boost/progress.hpp>
#include <list>
using namespace std;



//vector性能测试
void Containers::vectorPerformanceTest()
{
   
    StopWatch sw; //时间处理类
    TestRunAggregater tg; //运行时间
    tg.test1 = 0; //微秒
    tg.test2 = 0; //毫秒
    tg.test3 = 0; //秒

    // #1: 通过提前保留vector的大小,避免不必要的重新分配和复制周期。
    cout << "\n(1): 通过提前保留vector的大小,避免不必要的重新分配和复制周期";
    vector<BigTestStruct> testVector1;
    vector<BigTestStruct> testVector2;
    BigTestStruct f[ADD_BS];
    //控制台进度条
    boost::progress_display display(100); //参数为基数
    for (int i = 0; i < 100; i++)
    {
   
        
        sw.Restart(); //重置时间
        FillVector(testVector1); //添加一个数据结构体
        tg.test1 += sw.ElapsedUs(); //微妙

        sw.Restart();
        //重点:用reserve先储备10000个空间
        testVector2.reserve(ADD_BS);
        FillVector(testVector2);
        tg.test2 += sw.ElapsedUs();

        sw.Restart();
        shuZhu(f); //数组测试
        tg.test3 += sw.ElapsedUs();

        testVector1.clear(); //清除内容
        testVector1.shrink_to_fit(); //通过释放未使用的内存来减少内存使用
        testVector2.clear();
        testVector2.shrink_to_fit();
        ++display; //进度条
    }
    cout << "\n无预约创建"<<ADD_BS<<" vector,100次结果的平均时间:" << (tg.test1 / 100) << endl;
    cout << "reserve预约创建" << ADD_BS << " vector,100次结果平均时间:" << (tg.test2 / 100) << endl;
    cout << "数组创建" << ADD_BS << " 数组,100次结果平均时间:" << (tg.test3 / 100) << endl;
    tg.Reset();



    //#2 使用shrink_to_fit()来释放vector ,别用clear()或erase()清除内容而不释放内存
    cout << "\n\n(2)使用shrink_to_fit()来释放vector ,别用clear()或erase()清除内容而不释放内存\n";
    FillVector(testVector1);
    //capacity返回当前分配的存储中可以保存的元素数
    size_t capacity = testVector1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值