前言

测试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速度比较相关推荐

  1. 使用QList还是QVector的问题

    文章来自gitee的大神,这里总结了一下. 关于是使用QList还是QVector的问题,一直是众多Qter的选择问题,主要是这两个玩意提供的的接口函数基本一致,比如插入.删除.取值等. - 大多数情 ...

  2. QList与QVector遍历方法与性能比较

    目录 一. 性能测试 二. QList与QVector耗时对比分析 三.QList遍历方式对比分析 四.QVector遍历方式对比分析 一. 性能测试 最近使用opengl画点云数据时发现比较卡顿,原 ...

  3. Qt工作笔记-QList (链表) QVector (数组)【转载】

    原文地址:https://blog.csdn.net/qq_33266987/article/details/53333373 C++中的list 和 vector (1). stl提供了三个最基本的 ...

  4. QList和QVector等容器的区别

    QList和QVector等容器的区别. 1.大多数情况下可以用QList.像prepend()和insert()这种操作,通常QList比QVector快的多.这是因为QList是基于index标签 ...

  5. QList、QVector、QMap容器类

    QList.QVector.QMap容器类 QList<QString> list,创建一个列表对象,存储一列QString类型的值. list<<str<<str ...

  6. QList (链表) QVector (数组)

    QList (链表) & QVector (数组) C++中的list和vector stl提供了三个最基本的容器:vector/list/deque. vector和built-in数组类似 ...

  7. QList、QVector,QSet,std::vector,std::list直接的转换关系总结

    一:QList提供了 QList类提供了与QVector,QList,QSet,std::list四种直接的转换 QSet到QList,函数为:QList<QString>::fromSe ...

  8. QList、QVector、QMap、QHash安全删除(指定删除、遍历删除、快速删除)

    Q各种容易结构介绍: 除了QVarLengthArray,所有QTL数据都存放在堆空间,支持隐式共享. QVarLengthArray:数据存储在对象内,连续存储结构,无隐式共享功能: QVector ...

  9. 分布式系统深入理解2PC和3PC

    分布式系统深入理解2PC和3PC 介绍了一下2PC和3PC(详见:[关于分布式事务.两阶段提交协议.三阶提交协议](./分布式事务中的两阶段.三阶段提交协议.md).上一篇文章中主要介绍了下这两种分布 ...

最新文章

  1. jQuery基础知识准备
  2. Android点赞音效播放
  3. 数据迁移,不停机上线的正确姿势
  4. 专家观点:你必须了解的嵌入式Linux特性
  5. 结构体(struct)的不同写法和tag前缀
  6. [推荐系统实践_项亮] 第一章:好的推荐系统
  7. 解析rtcm32报文工具_rtcm数据格式技术分享
  8. cad详图怎么画_CAD结构图怎么画?手把手教你CAD结构图的绘制方法
  9. 键盘无响应-如何修复键盘注册表
  10. PHPStorm运行PHP代码(新手教程),PHP新手入门教程
  11. 打造有身体的 AI丨记青源Workshop具身智能与机器人研讨会(2022年第8期)
  12. task3- python与word
  13. 阿里云API网关使用教程
  14. Quartz任务调度——快速入门
  15. 降维算法总结(超全!附代码)
  16. SIP 请求方法(4)-CANCEL OPTIONS
  17. 用什么软件测试显示器的赫兹,外媒测试90Hz与60Hz屏幕:大家真能看出差异吗?...
  18. 读 Dov M. Gabbay 之 Handbook of the History of Logic. Volume 1: Greek, Indian and Arabic Logic
  19. win10 如何在防火墙开放端口
  20. poj--1177(线段树+离散化+扫描线)

热门文章

  1. DrySister看妹子应用(第一版)——5.代码回顾,调整与日志类编写
  2. 大数据开发和Java开发的技术要求有什么联系?
  3. http请求头相关解释
  4. 确认! Python再次夺冠,80%的程序员痛快!你怎么看?
  5. css sprite-网页优化技术
  6. 建筑企业如何合法合规采用“灵活用工”模式?
  7. 数据交互协议——JSON
  8. winserver2012R2虚拟机安装密钥
  9. python面向对象实践二(银行账户资金交易管理)
  10. SpringMVC的@Validated校验注解使用方法