测试环境:Qt creator, MinGW 32bit Release
想要测试定义一个std::unordered_set需要花费多少时间,于是有如下代码
#include <iostream>
#include <unordered_set>
#include <time.h>
using namespace std;
int main()
{
const int N = 10000000;
int num = N;
clock_t start, finish;
start = clock();
while(num-- > 0){
std::unordered_set<int> set_;
}
finish = clock();
cout << "create " << N <<" std::unordered_set<int> : " << (double)(finish - start) << " ms\n";
return 0;
}
结果发现无论N的值设为多大,都只花费0ms,好像set的构造函数并没有被执行。
另外,当我执行两遍while循环进行测试,代码如下
#include <iostream>
#include <unordered_set>
#include <time.h>
using namespace std;
int main()
{
const int N = 10000000;
int num = N;
clock_t start, finish;
start = clock();
while(num-- > 0){
std::unordered_set<int> set_;
}
finish = clock();
cout << "create " << N <<" std::unordered_set<int> : " << (double)(finish - start) << " ms\n";
start = clock();
num = N;
while(num-- > 0){
std::unordered_set<int> set_;
}
finish = clock();
cout << "create " << N <<" std::unordered_set<int> : " << (double)(finish - start) << " ms\n";
return 0;
}
就出现了奇怪的结果,两次while都花费了100多ms,明明之前测试时无论N值设为多少,第一个while循环只花费0ms。
且花费的时间会随着N增大而变长
现在如果我将某一个while内的set注释掉,则时间又会变成0ms
#include <iostream>
#include <unordered_set>
#include <time.h>
using namespace std;
int main()
{
const int N = 10000000;
int num = N;
clock_t start, finish;
start = clock();
while(num-- > 0){
std::unordered_set<int> set_;
}
finish = clock();
cout << "create " << N <<" std::unordered_set<int> : " << (double)(finish - start) << " ms\n";
start = clock();
num = N;
while(num-- > 0){
//std::unordered_set<int> set_;
}
finish = clock();
cout << "create " << N <<" std::unordered_set<int> : " << (double)(finish - start) << " ms\n";
return 0;
}
这不是很奇怪嘛,unordered_set的定义所花费的时间与外部循环次数没有关系,而是与在同一代码段有没有再次定义有关,而且只有unordered_set才会有这个现象list vector set都没有这种情况,请问这是为什么??