【发布时间】:2020-12-13 21:31:37
【问题描述】:
我运行了一个测试来比较 QVector 和 QList 插入/排序性能与此代码:
#include <algorithm>
#include <iostream>
#include <boost/timer/timer.hpp>
#include <QVector>
#include <QList>
int main()
{
constexpr auto size = 10000000ul;
srand(time(nullptr));
std::cout << std::endl;
std::cout << "-------------------------------------------------------------------------" << std::endl;
std::cout << std::endl;
{
std::cout << "First test with QVector<int>" << std::endl;
boost::timer::auto_cpu_timer _g;
QVector<int> vector(size);
{
std::cout << "\t Generating:" << std::endl << "\t\t";
boost::timer::auto_cpu_timer _;
std::generate(std::begin(vector), std::end(vector), []
{
return clock() % rand();
});
}
std::cout << std::endl;
{
std::cout << "\t Sorting:" << std::endl << "\t\t";
boost::timer::auto_cpu_timer _;
std::sort(std::begin(vector), std::end(vector));
}
std::cout << std::endl;
}
std::cout << std::endl;
std::cout << "-------------------------------------------------------------------------" << std::endl;
std::cout << std::endl;
{
std::cout << "Second test with QList<int>" << std::endl;
boost::timer::auto_cpu_timer _g;
QList<int> list;
list.reserve(size);
{
std::cout << "\t Generating:" << std::endl << "\t\t";
boost::timer::auto_cpu_timer _;
std::generate(std::begin(list), std::end(list), []
{
return clock() % rand();
});
}
std::cout << std::endl;
{
std::cout << "\t Sorting:" << std::endl << "\t\t";
boost::timer::auto_cpu_timer _;
std::sort(std::begin(list), std::end(list));
}
std::cout << std::endl;
}
std::cout << std::endl;
std::cout << "-------------------------------------------------------------------------" << std::endl;
std::cout << std::endl;
}
一种可能的输出:
-------------------------------------------------------------------------
First test with QVector<int>
Generating:
5.544336s wall, 3.240000s user + 2.250000s system = 5.490000s CPU (99.0%)
Sorting:
2.593883s wall, 2.550000s user + 0.010000s system = 2.560000s CPU (98.7%)
8.157371s wall, 5.790000s user + 2.280000s system = 8.070000s CPU (98.9%)
-------------------------------------------------------------------------
Second test with QList<int>
Generating:
0.000001s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%)
Sorting:
0.000001s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%)
0.000060s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%)
-------------------------------------------------------------------------
我使用QList<int>::reserve函数保留内存,并使用std::generate生成随机数并将其插入到QList变量中。但它什么也不做,因为QList 总是空的。
我该如何解决?
【问题讨论】: