第11回は時間関係になります。 従来の方法で時間計測を行う場合 1: #include <iostream> 2: #include <array> 3: #include <algorithm> 4: #include <random> 5: #include <ctime> 6: 7: using namespace std; 8: 9: int main() 10: { 11: //10万の長さの配列 12: array<double, 100000> arr; 13: random_device rd; 14: 15: //乱数で初期化 16: generate(arr.begin(), arr.end(), [&rd](){return rd();}); 17: 18: //計測開始 19: clock_t start = clock(); 20: 21: for_each(arr.begin(), arr.end(), [](double& i){i = i*i;}); 22: 23: //計測終了 24: clock_t end = clock(); 25: 26: //結果の表示 27: cout << "time[s] = " << (double)(end - start) / CLOCKS_PER_SEC << endl; 28: 29: return 0; 30: } C言語にもある<time.h>あるいは、<ctime>を使用していましたが、これでは秒でしか計測出来ないため他の単位に変換する場合は自分で処理を書く必要がありました。 1: #include <iostream> 2: #include <array> 3: #include <algorithm> 4: #include <random> 5: #include <chrono> 6: 7: using namespace std; 8: 9: int main() 10: { 11: //10万の長さの配列 12: array<double, 100000> arr; 13: 14: random_device rd; 15: 16: //乱数で初期化 17: generate(arr.begin(), arr.end(), [&rd](){return rd();}); 18: 19: //計測開始 20: auto start = chrono::system_clock::now(); 21: 22: for_each(arr.begin(), arr.end(), [](double& i){i = i*i;}); 23: 24: //計測終了 25: auto end = chrono::system_clock::now(); 26: 27: //結果の表示 28: auto diff = end - start; 29: //秒 30: cout << "time[s] = " << chrono::duration_cast<chrono::seconds>(diff).count() << endl; 31: //ミリ秒 32: cout << "time[ms] = " << chrono::duration_cast<chrono::milliseconds>(diff).count() << endl; 33: //マイクロ秒 34: cout << "time[μs] = " << chrono::duration_cast<chrono::microseconds>(diff).count() << endl; 35: //ナノ秒 36: cout << "time[ns] = " << chrono::duration_cast<chrono::nanoseconds>(diff).count() << endl; 37: 38: return 0; 39: } 結果の所を見ればわかりますが、複数の単位に変換出来ることが分かります。(もちろん時、分にも変換可能) 1: #include <iostream> 2: #include <chrono> 3: 4: using namespace std; 5: 6: int main() 7: { 8: chrono::seconds sec(60);//60秒 9: chrono::minutes min(2);//2分 10: 11: //秒+分 12: auto result = sec + min; 13: 14: //結果は秒で表示される(180秒) 15: cout << result.count() << endl; 16: 17: //もちろん分にすることも可能 18: cout << chrono::duration_cast<chrono::minutes>(result).count() << endl; 19: 20: return 0; 21: } このようなことも出来ます。 std::chrono::duration<数値型, 単位型> になります。(単位型はC++11講座14回の有理数を使います) 以上でC++11での時間計測の説明を終わります。 前→C++11講座10回 |