zoukankan      html  css  js  c++  java
  • Vector,array,传统数组速度的比较

    -1:特别鸣谢

    @L_T_F_:提供Windows下的debug和release的数据
    @东北小蟹蟹:提供Linux下的数据


    0:一些声明

    1. 作者的电脑信息:
      message

    2. 这篇文章所用的IDE:VS2019最新版

    3. VS2019所建立的项目:控制台项目

    4. linux下的测试由@东北小蟹蟹 提供,感谢。

    5. 本文提到的所有数据均为5次试验

    6. 所有的平均值均检验过

    7. 本位作者并无挑拨离间的意思,只是一时兴起想做个测试

    8. 如果哪里有问题,请在下边留言~


    1:为什么要写这篇文章

    @L_T_F_一天跟我发了一段QQ聊天的截图,具体内容是关于vector和数组的运行速度的争论。
    我一时也觉得很好玩,这里还是不不放上聊天截图了。
    于是,这篇文章就诞生了。


    2:准备工作

    本次分为两种方式判定速度:

    • Debug模式
    • Release模式

    每个模式下会有四个不同的测试方式,分别为:

    • 循环赋值
    • 加法运算
    • 乘法运算
    • 随机访问

    测评之前并没有考虑到除法和%,但是好像这两个是更慢的……
    测评也没有考虑到位运算,因为位运算挺快的。
    如果你有兴趣你也可以试试。
    他们对应的代码分别为:

    for(int i = 0;i < n;i ++) xxx[i] = 0;
    for(int i = 1;i < n;i ++) xxx[i] = xxx[i-1]+rand()%10;
    for(int i = 1;i < n;i ++) xxx[i] = xxx[i-1]*rand()%10;
    for(int i = 0;i < n;i ++) xxx[i];//真·我只是访问一下
    

    其中,xxxunsigned long long类型,(n = (1e5)^2)
    注:数组大小只有(1e5),这里的(n)只是循环次数。
    时间单位:s
    储存时间的数据类型:long double
    小数位数:四舍五入到第三位
    rand:并没有随机数种子


    3:在Windows下

    3.1.2:Debug下的赋值

    Debug下的赋值所需时间:

    项目 传统数组 vector array
    第一次 0.008 0.091 0.089
    第二次 0.007 0.167 0.075
    第三次 0.006 0.165 0.093
    第四次 0.006 0.070 0.079
    第五次 0.006 0.119 0.075
    平均值 0.066 0.122 0.082
    最大值 0.008 0.167 0.093
    最小值 0.007 0.070 0.075

    从这里可以看出,所需时间( exttt{方括号数组}<array<vector)

    3.1.2:Release下的赋值

    讲道理让我吃了一惊

    项目 传统数组 vector array
    第一次 0.000 0.000 0.000
    第二次 0.000 0.000 0.000
    第三次 0.000 0.000 0.000
    第四次 0.000 0.000 0.000
    第五次 0.000 0.000 0.000
    平均值 0.000 0.000 0.000
    最大值 0.000 0.000 0.000
    最小值 0.000 0.000 0.000

    讲道理,我怀疑我电脑出了问题……


    3.2.1:Debug下的加法运算

    如下表:

    项目 传统数组 vector array
    第一次 0.116 0.205 0.131
    第二次 0.069 0.182 0.184
    第三次 0.079 0.150 0.151
    第四次 0.097 0.156 0.130
    第五次 0.077 0.155 0.185
    平均值 0.087 0.169 0.156
    最大值 0.116 0.205 0.185
    最小值 0.097 0.155 0.130

    这个时候,传统方括号数组依然遥遥领先,vector略逊色于array

    3.2.2:Release下的加法运算

    如下表,来吧,传说中的0ms……

    项目 传统数组 vector array
    第一次 0.000 0.004 0.005
    第二次 0.000 0.005 0.007
    第三次 0.000 0.005 0.006
    第四次 0.000 0.007 0.005
    第五次 0.000 0.006 0.005
    平均值 0.000 0.005(0.0054) 0.006(0.0056)
    最大值 0.000 0.007 0.007
    最小值 0.000 0.004 0.005

    这里arrayvector其实也不分上下,但是方括号带来的0ms的确是杠杠滴……


    3.3.1:Debug下的乘法运算

    差距逐渐的拉开了:

    项目 传统数组 vector array
    第一次 0.067 0.923 0.719
    第二次 0.700 0.788 0.847
    第三次 0.673 0.791 0.781
    第四次 0.829 0.812 0.821
    第五次 0.510 0.703 0.785
    平均值 0.676 0.803 0.790
    最大值 0.829 0.923 0.847
    最小值 0.067 0.703 0.719

    传统数组依然是很快的,这个时候arrayvector来开差距了~

    3.3.2:Release下的乘法运算

    项目 传统数组 vector array
    第一次 0.097 0.923 0.719
    第二次 0.070 0.788 0.847
    第三次 0.123 0.791 0.781
    第四次 0.141 0.812 0.821
    第五次 0.770 0.703 0.785
    平均值 0.240 0.803 0.790
    最大值 0.141 0.923 0.847
    最小值 0.970 0.703 0.719
  • 相关阅读:
    C语言调试示例
    Tiff格式详解(转载)
    指纹
    twitter
    baidu
    NoSuchMethodError随记
    IllegalArgumentException异常
    Springboot2.2.9接入阿里云ES(带高亮查询)
    阿里云ECS安装cnpm
    阿里云ECS安装docker
  • 原文地址:https://www.cnblogs.com/sdltf/p/12841544.html
Copyright © 2011-2022 走看看