没有任何作用。函数调用时甚至不是简单整数的增量。
我怀疑以下内容出现在头文件中:
static clock_t t1, total;
如果是这种情况,每个翻译单元都将获得两个变量的单独实例(感谢static
)。
要修复,请更改static
标题extern
中的 ,并将以下内容添加到 .cpp 文件中:
clock_t t1, total;
要遵循的编辑示例演示了这一点:
根据 OP 的要求,这是一个简短的示例,它使用模板比较器和此答案中的配方来声明和管理运行时钟总数。
主文件
#ifndef PROJMAIN_DEFINED
#define PROJMAIN_DEFINED
extern clock_t total;
template<typename T>
bool less_default(const T& left, const T& right)
{
clock_t t1 = clock();
bool res = (left < right);
total += (clock() - t1);
return res;
};
#endif
主文件
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include "main.h"
using namespace std;
clock_t total = 0;
int main()
{
static const size_t N = 2048;
vector<int> values;
values.reserve(N);
std::srand((unsigned)time(0));
cout << "Generating..." << endl;
generate_n(back_inserter(values), N, [](){ static int i=0; return ++i;});
for (int i=0;i<5;++i)
{
random_shuffle(values.begin(), values.end());
cout << "Sorting ..." << endl;
total = 0;
std::sort(values.begin(), values.end(), less_default<int>);
cout << "Finished! : Total = " << total << endl;
}
return EXIT_SUCCESS;
}
输出
Generating...
Sorting ...
Finished! : Total = 13725
Sorting ...
Finished! : Total = 13393
Sorting ...
Finished! : Total = 15400
Sorting ...
Finished! : Total = 13830
Sorting ...
Finished! : Total = 15789