沒有用。在函數調用中甚至沒有增加一個簡單的整數。
我懷疑下面出現在頭文件:
static clock_t t1, total;
如果是這樣的話,每個翻譯單元會得到這兩個變量的其自己的獨立實例(感謝static
)。
要解決,在頭改變static
至extern
,並添加以下的.cpp文件:
clock_t t1, total;
編輯樣品遵循演示了此:
每OP的請求,這是一個簡短的例子,它使用模板比較器和該答案中的配方來聲明和管理運行時鐘總數。
main.h
#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
的main.cpp
#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
來源
2013-03-14 07:18:56
NPE
你是從同一個文件調用嗎?它是否在.h文件中? – littleadv 2013-03-14 07:18:30
考慮將'static'改爲'extern',並在'main()'源文件(或其他合適的位置)聲明**一個** * real *的一組變量。 – WhozCraig 2013-03-14 07:22:21
考慮衡量一百萬個對象的比較,而不是一個對象。請使用其他的但全局的東西。 – 2013-03-14 07:26:56