www.qtbig.com:QList的at与[]10亿次运行速度比较(运行速度at都优于[],但区别不大)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nicai_xiaoqinxi/article/details/91050289
看看谁的速度快?
环境
windows10系统
Qt4.8.7(gcc 4.9.2)
Qt5.12.3(gcc 7.3.0)
Qt Debug构建
10亿次操作比较
对比
单位ms
源码最后附录
Qt版本 参考 at const at [] const []
4.8.7 14 278 279 639 629
5.12.3 14 325 322 418 411
分析
Qt5.12.3整体运行速度快于Qt4.8.7;
无论是Qt4.8.7或是Qt5.12.3的运行速度at都优于[];
在Qt4.8.7版本下at和[]运行速度相差不大;
在Qt5.12.3版本下at和[]运行速度相差不大。
附录
Qt4.8.7与Qt5.12.3的相同QList源码
template <typename T>
inline const T &QList<T>::at(int i) const
{ Q_ASSERT_X(i >= 0 && i < p.size(), "QList<T>::at", "index out of range");
return reinterpret_cast<Node *>(p.at(i))->t(); }
template <typename T>
inline const T &QList<T>::operator[](int i) const
{ Q_ASSERT_X(i >= 0 && i < p.size(), "QList<T>::operator[]", "index out of range");
return reinterpret_cast<Node *>(p.at(i))->t(); }
template <typename T>
inline T &QList<T>::operator[](int i)
{ Q_ASSERT_X(i >= 0 && i < p.size(), "QList<T>::operator[]", "index out of range");
detach(); return reinterpret_cast<Node *>(p.at(i))->t(); }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
测试源码
#include <QList>
#include <QElapsedTimer>
#include <QUuid>
#include <QDebug>
#define ForLoop for (unsigned int i = 0; i < 10*1000*1000; i++)
static QList<int> list;
static QElapsedTimer timer;
qint64 runningTime()
{
timer.start();
ForLoop {
int count = 1 + 2 + 3;
}
return timer.elapsed();
}
qint64 atRunningTime()
{
timer.start();
ForLoop {
int count = list.at(0) + list.at(1) + list.at(2);
}
return timer.elapsed();
}
qint64 constAtRunningTime()
{
timer.start();
ForLoop {
const int count = list.at(0) + list.at(1) + list.at(2);
}
return timer.elapsed();
}
qint64 squareOperationRunningTime()
{
timer.start();
ForLoop {
int count = list[0] + list[1] + list[2];
}
return timer.elapsed();
}
qint64 constSquareOperationRunningTime()
{
timer.start();
ForLoop {
const int count = list[0] + list[1] + list[2];
}
return timer.elapsed();
}
int main(int argc, char *argv[])
{
list<<0<<1<<2;
qDebug()<<"SourceRunningTime: "<<runningTime()<<"milliseconds.";
qDebug()<<"atRunningTime: "<<atRunningTime()<<"milliseconds.";
qDebug()<<"constAtRunningTime: "<<constAtRunningTime()<<"milliseconds.";
qDebug()<<"squareOperationRunningTime: "<<squareOperationRunningTime()<<"milliseconds.";
qDebug()<<"constSquareOperationRunningTime: "<<constSquareOperationRunningTime()<<"milliseconds.";
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
————————————————
版权声明:本文为CSDN博主「Qt君」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nicai_xiaoqinxi/article/details/91050289
www.qtbig.com:QList的at与[]10亿次运行速度比较(运行速度at都优于[],但区别不大)的更多相关文章
- 使用HAProxy、PHP、Redis和MySQL支撑每周10亿请求
在公司的发展中,保证服务器的可扩展性对于扩大企业的市场需要具有重要作用,因此,这对架构师提出了一定的要求.Octivi联合创始人兼软件架构师Antoni Orfin将向你介绍一个非常简单的架构,使用H ...
- 转 使用HAProxy,PHPRedis,和MySQL支撑10亿请求每周架构细节
[编者按]在公司的发展中,保证服务器的可扩展性对于扩大企业的市场需要具有重要作用,因此,这对架构师提出了一定的要求.Octivi联合创始人兼软件架构师Antoni Orfin将向你介绍一个非常简单的架 ...
- “军装照”背后——天天P图如何应对10亿流量的后台承载。
WeTest 导读 天天P图"军装照"活动交出了一份10亿浏览量的答卷,一时间刷屏朋友圈,看到这幕,是不是特别想复制一个如此成功的H5?不过本文不教你如何做一个爆款H5,而是介绍天 ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些. 先拿10000个数建堆, ...
- 安装win10操作系统的设备将要突破10亿台
导读 该公司最初的目标是在发布后的三年内在 10 亿台设备上运行 Windows 10. 据微软高管梅赫迪 (Yusuf Mehdi) 周四在 Twitter 上透露,目前已经有 8 亿多台设备安装了 ...
- TOP100summit:【分享实录-QQ空间】10亿级直播背后的技术优化
本篇文章内容来自2016年TOP100summit QQ空间客户端研发总监王辉的案例分享.编辑:Cynthia 王辉:腾讯SNG社交平台部研发总监.腾讯QQ空间移动客户端技术负责人高级工程师.09年起 ...
- 有10 亿个 url,每个 url 大小小于 56B,要求去重,内存只给你4G
问题:有10 亿个 url,每个 url 大小小于 56B,要求去重,内存只给你4G 思路: 1.首先将给定的url调用hash方法计算出对应的hash的value,在10亿的url中相同url必然有 ...
- 转 DataTorrent 1.0每秒处理超过10亿个实时事件
DataTorrent是一个实时的流式处理和分析平台,它每秒可以处理超过10亿个实时事件. 与Twitter平均每秒大约6000条微博相比,最近发布的DataTorrent 1.0似乎已经超出了需求, ...
- 你知道军装照H5浏览了多少次吗? 10亿
7月29日,由人民日报客户端推出的<快看呐!这是我的军装照>(以下简称<军装照>)H5页面,由它所引发的全民晒“军装照”现象级事件,据统计,截至8月18日,<军装照> ...
随机推荐
- shell脚本编程基础知识点
整数比较: -eq:测试两个整数是否相等:相等为真,不等为假 -ne:测试两个整数是否不等:不等为真,相等为假 -gt:测试一个数是否大于另一个数:大于为真,否则为假 -lt:测试一个数是否小于另一个 ...
- mysql 根据发音查找内容
当前表 mysql> select * from table1; +----------+------------+-----+ | name_new | transactor | pid | ...
- EasyEarth三维可视化解决方案——智慧林业
智慧林业 智能巡管监护 护林员信息查询 护林员管护范围查询 护林员报警.采集数据查看 样点.样线管理 其它功能模块 ●一键考勤打卡 ●面积测量 ●任务公告发布 ●实时电量监控 ●一键报警功能 ●北斗短 ...
- win7安装composer Failed to decode zlib stream
今天学习php的时候想安装一下composer,刚开始采用的是exe文件的安装方式,可是安装了好几次都没有安装成功,如下图: 可能还有其他的一些错误,所以这里我就换了一个方式安装,就是自己手动来安装c ...
- TICK/TIGK运维栈安装运行 docker-compose【下】
InfluxDB 构建Dockerfilevim /opt/influxdb-docker/Dockerfile FROM influxdb COPY influxdb.conf /etc/influ ...
- SQLSERVER教师学生成绩课程四表联合各种SQL考题
--CREATE DATABASE EXAM_1 --GO USE EXAM_1 --判断并删除表 IF OBJECT_ID('Scores') IS NOT NULL DROP TABLE Scor ...
- CentOS 7镜像下载
官网下载链接:http://isoredirect.centos.org/centos/7/isos/x86_64/ step1: 进入下载页,选择阿里云站点进行下载 Actual Country ...
- Linux_CentOS中Mongodb4.x 安装调试、远程管理、配置 mongodb 管理员密码
Mongodb4.x 安装 官方文档:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 1.配置 yum 源 1 ...
- 有无关键字new的区别
function Person(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } const ...
- Laya的对象唯一标识
Egret中是obj.hashcode Laya中是obj["$_GID"]