Qt与STL容器效率比较
Qt与STL容器效率比较
测试平台:windows10 Intel 7700HQ
编译器:MSVC2017*64 -O2
vector
插入500000000个int值并删除,测试运行时间,代码如下:
#include "mainwindow.h"
#include <iostream>
#include <QApplication>
#include <vector>
#include <QVector>
#include <windows.h>
std::vector<int> stl;
QVector<int> Qtv;
int main(int argc, char *argv[]) {
LARGE_INTEGER beg,ed,freq;
std::cout<<"begin test!"<<std::endl;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&beg);
for(int i = 1; i<=500000000; i++) {
stl.push_back(i);
}
stl.clear();
QueryPerformanceCounter(&ed);
double duration = (double)(ed.QuadPart-beg.QuadPart)/(double)freq.QuadPart;
std::cout<<"std:"<<duration<<std::endl;
QueryPerformanceCounter(&beg);
for(int i = 1; i<=500000000; i++) {
Qtv.push_back(i);
}
Qtv.clear();
QueryPerformanceCounter(&ed);
duration = (double)(ed.QuadPart-beg.QuadPart)/(double)freq.QuadPart;
std::cout<<"Qt:"<<duration<<std::endl;
return 0;
}
结果:单位:s
项目 | 测试1 | 测试2 | 测试3 |
---|---|---|---|
stl | 4.49656 | 4.26468 | 4.30204 |
qt | 4.69023 | 4.74365 | 4.69194 |
如果是1000000000的数据量的话STL需要7.5s,而Qt会直接卡死。综上来看,stl的vector效率高于QVector。 |
set
插入50000000组数据,比较时间,代码:
#include "mainwindow.h"
#include <iostream>
#include <QApplication>
#include <set>
#include <QSet>
#include <cstdlib>
#include <windows.h>
std::set<int> stl;
QSet<int> Qtset;
int main(int argc, char *argv[]) {
LARGE_INTEGER beg,ed,freq;
std::cout<<"begin test!"<<std::endl;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&beg);
for(int i = 1; i<=50000000; i++) {
stl.insert(i);
}
stl.clear();
QueryPerformanceCounter(&ed);
double duration = (double)(ed.QuadPart-beg.QuadPart)/(double)freq.QuadPart;
std::cout<<"std:"<<duration<<std::endl;
QueryPerformanceCounter(&beg);
for(int i = 1; i<=50000000; i++) {
Qtset.insert(i);
}
Qtset.clear();
QueryPerformanceCounter(&ed);
duration = (double)(ed.QuadPart-beg.QuadPart)/(double)freq.QuadPart;
std::cout<<"Qt:"<<duration<<std::endl;
return 0;
}
项目 | 测试1 | 测试2 | 测试3 |
---|---|---|---|
stl | 13.8065 | 12.876 | 12.6713 |
qt | 6.56534 | 6.13544 | 6.20306 |
可见,QSet效率远高于STL. |