前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >放弃不切实际的幻想吧,list 就一定比 vector 插的快?

放弃不切实际的幻想吧,list 就一定比 vector 插的快?

作者头像
看、未来
发布2021-10-09 11:59:23
3250
发布2021-10-09 11:59:23
举报
文章被收录于专栏:CSDN搜“看,未来”
请添加图片描述
请添加图片描述

文章目录

一段对话

如果 list 真那么好,你自己用吗?

用啊,我当然用啦。

你用的是STL的吗?还是自己写的list?

自己写的。

为什么不用STL的,是它写的没你好?

它是双向链表,我就偶尔用用,自己又不是不会写。


尾插数据测试

代码语言:javascript
复制
//#include<vector>
#include<list>

#include<iostream>
#include<ctime>

using namespace std;
int main()
{
     clock_t startTime, endTime;
     startTime = clock();//计时开始
     //vector<int> vec;
     list<int> list_;
     
     for (int i = 0; i < 30000000; i++)    //vector试过二十多亿,到后面直接崩了,估计是hold不住,而且好久
     {
         //空跑的速度在0.001~0.004之间,无妨
         //vec.push_back(i);
         //vec.emplace_back(i); 
         //emplace_back:在容器尾部添加一个元素,这个元素原地构造,不需要触发拷贝构造和转移构造。

         //list_.push_back(i);    //1亿直接崩盘,52秒 
         //1千万,12秒,622M内存,跟飞一样。上面1亿也才九百多M内存
         //上面vector,3千万,12.5秒,253M内存,高下立判
     }
     endTime = clock();//计时结束
     cout << "The run time is: " << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
     system("pause");
     return 0;
}

自己测测,把注释该放出来的放出来。数据我基本收走了,要数据自己动手,留下点印象也是好的。


头插数据测试

代码语言:javascript
复制
//#include<vector>
#include<list>

#include<iostream>
#include<ctime>

using namespace std;
int main()
{
     clock_t startTime, endTime;
     startTime = clock();//计时开始
     //vector<int> vec;
     list<int> list_;
     
     for (int i = 0; i < 30000000; i++)    //vector试过二十多亿,到后面直接崩了,估计是hold不住,而且好久
     {
         //空跑的速度在0.001~0.004之间,无妨
         /*vec.insert(vec.begin(), i);
         cout << i << endl;*/   //头插就开始乌龟爬了
        
         list_.insert(list_.begin(), i);    //80s,1.8G,尾插的时候只要36秒呢,看来list也不是在哪里插都是一个速度啊,但是好歹比vector要快了
         //我突然有点明白nginx为什么要那样设计ngx_array了
         //1千万,12秒,622M内存,跟飞一样。上面1亿也才九百多M内存
         //上面vector,3千万,12.5秒,253M内存,高下立判
     }
     endTime = clock();//计时结束
     cout << "The run time is: " << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
     system("pause");
     return 0;
}

得出结论

1、VS进程内存是有限的哈,或者说,进程能分配到的内存应该是有上限的,不然还得了? 一个进程能使用的内存在2G左右波动,VS测试到2.2的时候没了,网上都说只给2G,可以自己调哈。所以我说,2G左右嘛。

2、list消耗内存,这个嘛,说真的,我一直觉得 list 的内存消耗是会在vector 的3倍,毕竟双向链表嘛。 但是一下高了8倍我也不知道为啥了。

3、对于尾插,vector是真的有优势,其实也不难解释,list 插一个就要去找一块地址。

4、list 头插速度居然跟尾插速度不一样?!!!差了好几倍里面。。。

5、我终于知道 nginx 为什么要那样设计 ngx_list 了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一段对话
  • 尾插数据测试
  • 头插数据测试
  • 得出结论
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档