C++STL之vecot、list、deque的排序插入访问效率

12 篇文章 0 订阅

 低数据量的参考价值不高,其余数据仅供参考,测试代码在末尾

排序

第一次测试第二次测试
STL类型数据量时间STL类型数据量时间
vector[10] 0.002000 msvector[10] 0.001200 ms
deque[10] 0.001000 msdeque[10] 0.001200 ms
list[10] 0.006100 mslist[10] 0.006300 ms
vector[100] 0.013000 msvector[100] 0.012800 ms
deque[100] 0.018100 msdeque[100] 0.025500 ms
list[100] 0.034600 mslist[100] 0.034500 ms
vector[1000] 0.167400 msvector[1000] 0.175100 ms
deque[1000] 0.249500 msdeque[1000] 0.232600 ms
list[1000] 0.335400 mslist[1000] 0.306200 ms
vector[10000] 2.463100 msvector[10000] 1.860000 ms
deque[10000] 3.980700 msdeque[10000] 3.481800 ms
list[10000] 3.658400 mslist[10000] 3.241400 ms
vector[100000] 22.882200 msvector[100000] 23.015800 ms
deque[100000] 41.197100 msdeque[100000] 40.967900 ms
list[100000] 38.998300 mslist[100000] 43.113200 ms
vector[1000000] 314.351900 msvector[1000000] 329.186100 ms
deque[1000000] 479.412800 msdeque[1000000] 544.450100 ms
list[1000000] 419.358300 mslist[1000000] 436.013500 ms
vector[10000000] 3480.290600 msvector[10000000] 3740.554700 ms
deque[10000000] 5944.471200 msdeque[10000000] 7357.065300 ms
list[10000000] 4605.769500 mslist[10000000] 5654.132900 ms
vector[100000000] 40153.967400 msvector[100000000] 40712.219500 ms
deque[100000000] 67193.713700 msdeque[100000000] 72516.952100 ms
list[100000000] 118565.940800 mslist[100000000] 118480.152200 ms

 遍历

第一次测试第二次测试
STL类型数据量时间STL类型数据量时间
vector[10] 0.000300 msvector[10] 0.000200 ms
deque[10] 0.000200 msdeque[10] 0.000200 ms
list[10] 0.000200 mslist[10] 0.000200 ms
vector[100] 0.001200 msvector[100] 0.001400 ms
deque[100] 0.001200 msdeque[100] 0.002700 ms
list[100] 0.000800 mslist[100] 0.001300 ms
vector[1000] 0.010600 msvector[1000] 0.013100 ms
deque[1000] 0.011500 msdeque[1000] 0.015200 ms
list[1000] 0.013800 mslist[1000] 0.016800 ms
vector[10000] 0.107000 msvector[10000] 0.105900 ms
deque[10000] 0.112900 msdeque[10000] 0.112700 ms
list[10000] 0.103100 mslist[10000] 0.138700 ms
vector[100000] 1.208000 msvector[100000] 1.054200 ms
deque[100000] 1.178800 msdeque[100000] 1.137000 ms
list[100000] 1.379400 mslist[100000] 1.410100 ms
vector[1000000] 12.042600 msvector[1000000] 10.851900 ms
deque[1000000] 14.669900 msdeque[1000000] 11.408100 ms
list[1000000] 23.618800 mslist[1000000] 14.960900 ms
vector[10000000] 119.091800 msvector[10000000] 107.361400 ms
deque[10000000] 125.525200 msdeque[10000000] 114.837900 ms
list[10000000] 172.976000 mslist[10000000] 138.790100 ms
vector[100000000] 1123.479500 msvector[100000000] 1085.079900 ms
deque[100000000] 1432.462100 msdeque[100000000] 1231.170600 ms
list[100000000] 26583.275100 mslist[100000000] 29516.611300 ms

随机访问

第一次测试第二次测试
STL类型数据量时间STL类型数据量时间
vector[10] 0.000700 msvector[10] 0.000700 ms
deque[10] 0.002900 msdeque[10] 0.000900 ms
vector[100] 0.002800 msvector[100] 0.004300 ms
deque[100] 0.011000 msdeque[100] 0.007700 ms
vector[1000] 0.025600 msvector[1000] 0.036900 ms
deque[1000] 0.119900 msdeque[1000] 0.084700 ms
vector[10000] 0.252700 msvector[10000] 0.225000 ms
deque[10000] 0.873800 msdeque[10000] 1.152500 ms
vector[100000] 2.343200 msvector[100000] 2.418400 ms
deque[100000] 12.636400 msdeque[100000] 8.929900 ms
vector[1000000] 25.948700 msvector[1000000] 26.397100 ms
deque[1000000] 101.706100 msdeque[1000000] 108.760000 ms
vector[10000000] 263.142900 msvector[10000000] 258.937900 ms
deque[10000000] 909.556500 msdeque[10000000] 942.929800 ms
vector[100000000] 2512.655600 msvector[100000000] 2579.265800 ms
deque[100000000] 9093.358000 msdeque[100000000] 9312.056700 ms

头部和尾部访问

第一次测试第二次测试
STL类型数据量时间STL类型数据量时间
vector[10] 0.000300 msvector[10] 0.000100 ms
deque[10] 0.000100 msdeque[10] 0.000200 ms
list[10] 0.000100 mslist[10] 0.000100 ms
vector[100] 0.000700 msvector[100] 0.000800 ms
deque[100] 0.000900 msdeque[100] 0.001000 ms
list[100] 0.000700 mslist[100] 0.000700 ms
vector[1000] 0.006900 msvector[1000] 0.006400 ms
deque[1000] 0.009000 msdeque[1000] 0.008600 ms
list[1000] 0.005100 mslist[1000] 0.005000 ms
vector[10000] 0.060300 msvector[10000] 0.053400 ms
deque[10000] 0.083200 msdeque[10000] 0.084300 ms
list[10000] 0.062200 mslist[10000] 0.039500 ms
vector[100000] 0.561100 msvector[100000] 0.352100 ms
deque[100000] 0.765700 msdeque[100000] 0.579800 ms
list[100000] 0.392400 mslist[100000] 0.397100 ms
vector[1000000] 4.997800 msvector[1000000] 3.506600 ms
deque[1000000] 6.377500 msdeque[1000000] 5.841000 ms
list[1000000] 6.575100 mslist[1000000] 4.604900 ms
vector[10000000] 35.120100 msvector[10000000] 36.675500 ms
deque[10000000] 60.287000 msdeque[10000000] 65.807300 ms
list[10000000] 39.260500 mslist[10000000] 40.692700 ms
vector[100000000] 383.825800 msvector[100000000] 354.557900 ms
deque[100000000] 633.038200 msdeque[100000000] 650.863500 ms
list[100000000] 559.928900 mslist[100000000] 521.148300 ms

 头部插入

第一次测试第二次测试
STL类型数据量时间STL类型数据量时间
vector[10] 0.003900 msdeque[10] 0.001200 ms
deque[10] 0.001000 mslist[10] 0.006500 ms
list[10] 0.003400 msdeque[100] 0.005400 ms
vector[100] 0.011900 mslist[100] 0.022500 ms
deque[100] 0.003600 msdeque[1000] 0.066600 ms
list[100] 0.013900 mslist[1000] 0.153200 ms
vector[1000] 0.226200 msdeque[10000] 0.451200 ms
deque[1000] 0.034700 mslist[10000] 1.252800 ms
list[1000] 0.107600 msdeque[100000] 4.216300 ms
vector[10000] 18.577300 mslist[100000] 18.595400 ms
deque[10000] 0.353100 msdeque[1000000] 41.286700 ms
list[10000] 1.128600 mslist[1000000] 114.187600 ms
vector[100000] 2278.539000 msdeque[10000000] 410.797500 ms
deque[100000] 3.405600 mslist[10000000] 1448.404100 ms
list[100000] 11.317200 msdeque[100000000] 4396.088100 ms
跑了几分钟,跑不动了,下次不带vectorlist[100000000] 41812.761100 ms
最后一个list,vscode出现未响应,最终跑完了

 尾部插入

第一次测试第二次测试
STL类型数据量时间STL类型数据量时间
vector[10] 0.001300 msvector[10] 0.001300 ms
deque[10] 0.000300 msdeque[10] 0.000200 ms
list[10] 0.004800 mslist[10] 0.003700 ms
vector[100] 0.004900 msvector[100] 0.002000 ms
deque[100] 0.002200 msdeque[100] 0.001700 ms
list[100] 0.018600 mslist[100] 0.013700 ms
vector[1000] 0.029400 msvector[1000] 0.020600 ms
deque[1000] 0.025200 msdeque[1000] 0.015400 ms
list[1000] 0.118900 mslist[1000] 0.122700 ms
vector[10000] 0.199100 msvector[10000] 0.176200 ms
deque[10000] 0.183400 msdeque[10000] 0.255800 ms
list[10000] 1.265900 mslist[10000] 1.062200 ms
vector[100000] 1.648100 msvector[100000] 1.829100 ms
deque[100000] 1.544900 msdeque[100000] 1.524100 ms
list[100000] 11.430800 mslist[100000] 11.829800 ms
vector[1000000] 15.847200 msvector[1000000] 15.055700 ms
deque[1000000] 15.840700 msdeque[1000000] 16.084700 ms
list[1000000] 116.323400 mslist[1000000] 138.607200 ms
vector[10000000] 190.234400 msvector[10000000] 150.832000 ms
deque[10000000] 219.416800 msdeque[10000000] 159.012100 ms
list[10000000] 1217.601900 mslist[10000000] 1271.417400 ms
vector[100000000] 1622.149100 msvector[100000000] 1656.439900 ms
deque[100000000] 1869.682200 msdeque[100000000] 1878.220700 ms
list[100000000] 38475.655500 mslist[100000000] 34766.071100 ms
最后一个list,vs差点崩了

 中间插入

第一次测试第二次测试
STL类型数据量时间STL类型数据量时间
vector[10] 0.008500 msvector[10] 0.005900 ms
deque[10] 0.008000 msdeque[10] 0.020400 ms
list[10] 0.005400 mslist[10] 0.004300 ms
vector[100] 0.018000 msvector[100] 0.015700 ms
deque[100] 0.061700 msdeque[100] 0.137300 ms
list[100] 0.022600 mslist[100] 0.022700 ms
vector[1000] 0.278800 msvector[1000] 0.279100 ms
deque[1000] 1.839200 msdeque[1000] 1.328000 ms
list[1000] 0.253800 mslist[1000] 0.180200 ms
vector[10000] 15.583300 msvector[10000] 12.697400 ms
deque[10000] 95.036400 msdeque[10000] 97.230200 ms
list[10000] 1.099600 mslist[10000] 1.111200 ms
vector[100000] 1454.757300 msvector[100000] 1422.218700 ms
deque[100000] 8460.501500 msdeque[100000] 8300.219100 ms
list[100000] 12.281500 mslist[100000] 10.739700 ms
vector跑不动了,更不用说dequevector跑不动了,deque更不用说

不带参构造 

第一次测试第二次测试
STL类型数据量时间STL类型数据量时间
vector[10] 0.005500 msvector[10] 0.006900 ms
deque[10] 0.000700 msdeque[10] 0.000700 ms
list[10] 0.003100 mslist[10] 0.003000 ms
vector[100] 0.001100 msvector[100] 0.001100 ms
deque[100] 0.002600 msdeque[100] 0.001400 ms
list[100] 0.020500 mslist[100] 0.018500 ms
vector[1000] 0.020700 msvector[1000] 0.010600 ms
deque[1000] 0.023800 msdeque[1000] 0.019700 ms
list[1000] 0.170900 mslist[1000] 0.210600 ms
vector[10000] 0.041400 msvector[10000] 0.047700 ms
deque[10000] 0.103500 msdeque[10000] 0.154000 ms
list[10000] 1.194500 mslist[10000] 1.074400 ms
vector[100000] 0.399300 msvector[100000] 0.388900 ms
deque[100000] 1.080400 msdeque[100000] 1.346600 ms
list[100000] 10.583600 mslist[100000] 10.115300 ms
vector[1000000] 2.886400 msvector[1000000] 2.451400 ms
deque[1000000] 11.380100 msdeque[1000000] 10.980700 ms
list[1000000] 123.498700 mslist[1000000] 106.067900 ms
vector[10000000] 27.910400 msvector[10000000] 26.024500 ms
deque[10000000] 107.859500 msdeque[10000000] 107.314800 ms
list[10000000] 1078.205400 mslist[10000000] 1005.951800 ms
vector[100000000] 330.551500 msvector[100000000] 254.550300 ms
deque[100000000] 2675.832300 msdeque[100000000] 1161.987800 ms
list[100000000] 24754.977400 mslist[100000000] 15862.966400 ms

 析构的时间没有测,应该和构造的时间差不多。

 测试代码

#include <vector>
#include <list>
#include <deque>
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include "headers/timer.hpp"
using namespace std;

#define MAX_DATA 1e8    //最大数据量1亿
#ifdef RAND_MAX
#undef RAND_MAX
#define RAND_MAX 1e8    //修改rand()函数的最大值
#endif
int main()
{
    size_t N = 10;
    for(; N <= MAX_DATA; N *= 10)       //每次循环数据量*10
    {
        // vector部分
        vector<int> v;
        Timer t;
        v.resize(N);
        // sort(v.begin(), v.end());                                //排序
        // for(auto i = v.begin(); i != v.end(); ++i);              //遍历
        // for(int i = 0; i < N ; ++i) v[rand() % N];               //随机访问
        // for(int i = 0; i < N; ++i) v.begin(); v.end();           //头尾访问
        // for(int i = 0; i < N; ++i) v.emplace(v.begin(), 0);      //头部插入
        // for(int i = 0; i < N; ++i) v.emplace_back(0);            //尾部插入
        auto it_v = v.begin() + N/2;                                //中间插入
        t.Start();
        for(int i = 0; i < N; ++i) {
            it_v = v.emplace(it_v, 0);
        }
        t.Stop();
        cout << "vector:[" << N << "]: ";
        t.Display();
        cout << endl ;
        //deque部分
        deque<int> d;
        d.resize(N);
        // sort(d.begin(), d.end());
        // for(auto i = d.begin(); i != d.end(); ++i);
        // for(int i = 0; i < N ; ++i) d[rand() % N];
        // for(int i = 0; i < N; ++i) d.begin(); d.end();
        // for(int i = 0; i < N; ++i) d.emplace(d.begin(), 0);
        // for(int i = 0; i < N; ++i) d.emplace_back(0);
        auto it_d = d.begin() + N/2;
        t.Start();
        for(int i = 0; i < N; ++i) {
            it_d = d.emplace(it_d, 0);
        }
        t.Stop();
        cout << "deque:[" << N << "]: ";
        t.Display();
        cout << endl;
        //list部分
        list<int> l;
        l.resize(N);
        // l.sort();
        // for(auto i = l.begin(); i != l.end(); ++i);
        // for(int i = 0; i < N; ++i) l.begin(); l.end();
        // for(int i = 0; i < N; ++i) l.emplace(l.begin(), 0);
        // for(int i = 0; i < N; ++i) l.emplace_back(0);
        auto it = l.begin();
        for(int i = 0; i < N / 2; ++i, ++it);
        t.Start();
        for(int i = 0; i < N; ++i) {
            it = l.emplace(it, 0);
        }
        t.Stop();
        cout << "list:[" << N << "]: ";
        t.Display();
        cout << endl;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值