概述
IDE为Qt Creator 版本为5.7
编译器为MinGW
这个实验感觉与编译器有关(优化)Debug和Release也有关
下面所有的过程都是以Debug版本进行!!!!
程序界面很low,如下图:
变量100086个数据,并使用qDebug()进行输出
使用iterator运行截图如下:
使用sub运行截图如下:
本人运行了多次,这绝非偶然,使用iterator比sub快一倍左右。
总结下:
当数据量大的情况下,如果使用QVector,那么遍历的时候,优先考虑迭代吧!
当数据量大的情况下,如果使用QVector,那么遍历的时候,优先考虑迭代吧!
当数据量大的情况下,如果使用QVector,那么遍历的时候,优先考虑迭代吧!
可能结论不准确,因为是MinGw的编译器,并且还是Debug版本的
源码如下:
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QVector>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
public slots:
void iteratorBtnClicked();
void subBtnClicked();
private:
Ui::Widget *ui;
QVector<QString> m_strVec;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <ctime>
#include <QTime>
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->vectorItPushButton,SIGNAL(clicked(bool)),this,SLOT(iteratorBtnClicked()));
connect(ui->vectorSubPushButton,SIGNAL(clicked(bool)),this,SLOT(subBtnClicked()));
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
for(int i=0;i<100086;i++){
m_strVec.append("I am IT"+QString::number(qrand()%(2000-1970)+1970)+"!");
}
}
Widget::~Widget()
{
delete ui;
}
void Widget::iteratorBtnClicked()
{
//traverse it again
clock_t start,finish;
double totalTime;
start=clock();
QVector<QString>::iterator it=m_strVec.begin();
// while(it!=m_strVec.end()){
// qDebug()<<*it;
// it++;
// }
for(;it!=m_strVec.end();it++){
qDebug()<<*it;
it++;
}
finish=clock();
totalTime=(double)(finish-start)/CLOCKS_PER_SEC;
QMessageBox::information(this,"information","using sub traverse takes "+QString::number(totalTime,'f',6));
}
void Widget::subBtnClicked()
{
//traverse it again
clock_t start,finish;
double totalTime;
start=clock();
for(int i=0;i<m_strVec.size();i++){
qDebug()<<m_strVec[i];
}
finish=clock();
totalTime=(double)(finish-start)/CLOCKS_PER_SEC;
QMessageBox::information(this,"information","using sub traverse takes "+QString::number(totalTime,'f',6));
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
最后
以上就是自由老鼠为你收集整理的Qt工作笔记-QVector下标访问和迭代访问效率实践(大跌狗眼)的全部内容,希望文章能够帮你解决Qt工作笔记-QVector下标访问和迭代访问效率实践(大跌狗眼)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复