QList和QVector速度比较
前言
测试QList和QVector的数据插入和删除的速度。
代码如下(示例):
//以函数对象的形式定义查找规则--升序--MftNumber
class ascendingOrder {public:bool operator()(const int& i, const int& j) {return i < j;}};
//快速查找
/** 查找列表中不小于数据查找到返回当前位置的迭代器,否则返回大于迭代器的第一个位置。* 前提是排序好的列表,算法采用的是折半查找。*/
template<class ForwardIterator, class T, class Compare>QPair<ForwardIterator,ForwardIterator> quickFind(ForwardIterator first, ForwardIterator last, const T& val, Compare comp)
{ForwardIterator it = qLowerBound (first,last,val,comp);return qMakePair ( it, qUpperBound(it,last,val,comp) );
}
int main(int argc, char *argv[])
{int ttt= 100000;//测试100000个数据QTime t;t.start();QList<int> list;for(int i=0;i<ttt;i++){list.append(i);}qDebug()<<"list:"<<t.restart();for(int i=0;i<ttt;i++){QPair<QList<int>::iterator,QList<int>::iterator> j = quickFind(list.begin(),list.end(),list.at(i),ascendingOrder());quint64 pos = j.first - list.begin();//获取插入点list.insert(pos,i);}qDebug()<<"list插入:"<<t.restart();for(int i=0;i<ttt;i++){QPair<QList<int>::iterator,QList<int>::iterator> j = quickFind(list.begin(),list.end(),list.at(i),ascendingOrder());quint64 pos = j.first - list.begin();//获取插入点list.removeAt(pos);}qDebug()<<"list刪除:"<<t.restart();QVector<int> vector;for(int i=0;i<ttt;i++){vector.append(i);}qDebug()<<"vector:"<<t.restart();for(int i=0;i<ttt;i++){QPair<QVector<int>::iterator,QVector<int>::iterator> j = quickFind(vector.begin(),vector.end(),vector.at(i),ascendingOrder());quint64 pos = j.first - vector.begin();//获取插入点vector.insert(pos,i);}qDebug()<<"vector插入:"<<t.restart();for(int i=0;i<ttt;i++){QPair<QVector<int>::iterator,QVector<int>::iterator> j = quickFind(vector.begin(),vector.end(),vector.at(i),ascendingOrder());quint64 pos = j.first - vector.begin();//获取插入点vector.removeAt(pos);}qDebug()<<"vector刪除:"<<t.restart();list.clear();for(int i=0;i<ttt;i++){list.append(i);}qDebug()<<"list:"<<t.restart();for(int i=0;i<ttt;i++){QPair<QList<int>::iterator,QList<int>::iterator> j = quickFind(list.begin(),list.end(),list.at(i),ascendingOrder());//quint64 pos = j.first - list.begin();//获取插入点list.insert(j.second,i);}qDebug()<<"list迭代器插入:"<<t.restart();for(int i=0;i<ttt;i++){QPair<QList<int>::iterator,QList<int>::iterator> j = quickFind(list.begin(),list.end(),list.at(i),ascendingOrder());//quint64 pos = j.first - list.begin();//获取插入点list.erase(j.first);}qDebug()<<"list迭代器刪除:"<<t.restart();vector.clear();for(int i=0;i<ttt;i++){vector.append(i);}qDebug()<<"vector:"<<t.restart();for(int i=0;i<ttt;i++){QPair<QVector<int>::iterator,QVector<int>::iterator> j = quickFind(vector.begin(),vector.end(),vector.at(i),ascendingOrder());//quint64 pos = j.first - vector.begin();//获取插入点vector.insert(j.second,i);}qDebug()<<"vector迭代器插入:"<<t.restart();for(int i=0;i<ttt;i++){QPair<QVector<int>::iterator,QVector<int>::iterator> j = quickFind(vector.begin(),vector.end(),vector.at(i),ascendingOrder());//quint64 pos = j.first - vector.begin();//获取插入点vector.erase(j.first);}qDebug()<<"vector迭代器刪除:"<<t.restart();return 0;
}
list: 2
list插入: 65
list刪除: 57
vector: 2
vector插入: 4587
vector刪除: 338
list: 3
list迭代器插入: 3322
list迭代器刪除: 772
vector: 2
vector迭代器插入: 3296
vector迭代器刪除: 667
总结:append();追加速度vector快一些;从中间插入或删除QList比QVector快7-8倍。
范围删除用:list.erase(list.begin(),list.begin()+10000);//速度是瞬间的
QList和QVector速度比较相关推荐
- 使用QList还是QVector的问题
文章来自gitee的大神,这里总结了一下. 关于是使用QList还是QVector的问题,一直是众多Qter的选择问题,主要是这两个玩意提供的的接口函数基本一致,比如插入.删除.取值等. - 大多数情 ...
- QList与QVector遍历方法与性能比较
目录 一. 性能测试 二. QList与QVector耗时对比分析 三.QList遍历方式对比分析 四.QVector遍历方式对比分析 一. 性能测试 最近使用opengl画点云数据时发现比较卡顿,原 ...
- Qt工作笔记-QList (链表) QVector (数组)【转载】
原文地址:https://blog.csdn.net/qq_33266987/article/details/53333373 C++中的list 和 vector (1). stl提供了三个最基本的 ...
- QList和QVector等容器的区别
QList和QVector等容器的区别. 1.大多数情况下可以用QList.像prepend()和insert()这种操作,通常QList比QVector快的多.这是因为QList是基于index标签 ...
- QList、QVector、QMap容器类
QList.QVector.QMap容器类 QList<QString> list,创建一个列表对象,存储一列QString类型的值. list<<str<<str ...
- QList (链表) QVector (数组)
QList (链表) & QVector (数组) C++中的list和vector stl提供了三个最基本的容器:vector/list/deque. vector和built-in数组类似 ...
- QList、QVector,QSet,std::vector,std::list直接的转换关系总结
一:QList提供了 QList类提供了与QVector,QList,QSet,std::list四种直接的转换 QSet到QList,函数为:QList<QString>::fromSe ...
- QList、QVector、QMap、QHash安全删除(指定删除、遍历删除、快速删除)
Q各种容易结构介绍: 除了QVarLengthArray,所有QTL数据都存放在堆空间,支持隐式共享. QVarLengthArray:数据存储在对象内,连续存储结构,无隐式共享功能: QVector ...
- 分布式系统深入理解2PC和3PC
分布式系统深入理解2PC和3PC 介绍了一下2PC和3PC(详见:[关于分布式事务.两阶段提交协议.三阶提交协议](./分布式事务中的两阶段.三阶段提交协议.md).上一篇文章中主要介绍了下这两种分布 ...
最新文章
- jQuery基础知识准备
- Android点赞音效播放
- 数据迁移,不停机上线的正确姿势
- 专家观点:你必须了解的嵌入式Linux特性
- 结构体(struct)的不同写法和tag前缀
- [推荐系统实践_项亮] 第一章:好的推荐系统
- 解析rtcm32报文工具_rtcm数据格式技术分享
- cad详图怎么画_CAD结构图怎么画?手把手教你CAD结构图的绘制方法
- 键盘无响应-如何修复键盘注册表
- PHPStorm运行PHP代码(新手教程),PHP新手入门教程
- 打造有身体的 AI丨记青源Workshop具身智能与机器人研讨会(2022年第8期)
- task3- python与word
- 阿里云API网关使用教程
- Quartz任务调度——快速入门
- 降维算法总结(超全!附代码)
- SIP 请求方法(4)-CANCEL OPTIONS
- 用什么软件测试显示器的赫兹,外媒测试90Hz与60Hz屏幕:大家真能看出差异吗?...
- 读 Dov M. Gabbay 之 Handbook of the History of Logic. Volume 1: Greek, Indian and Arabic Logic
- win10 如何在防火墙开放端口
- poj--1177(线段树+离散化+扫描线)