C++メモ stlの仕組みで時間測定をやってみる

C++

今まで仕事でC++のPGするときにはclock()を使ってたけど、C++11だったらstlにあるんでね?って思ったらあったので試してみることに。
そらぁ…ないわきゃないよねと後で思った…。

そんなこんなでポイントはこんな感じ。

  • 実行時の時間はchrono::system_clock::now()で取得する
  • 実行時間の差を計算する
  • 計算した差をchrono::duration_cast<chrono::単位>でキャストする
    ※単位って書いたとこは時間の単位のこと(今回はmsにしたいのでmilliseconds)
  • 時間をcount()で取得する

んで、サンプルのコードとしてはこんな感じ。

#include <iostream>
#include <map>
#include <string>
#include <chrono>

using namespace std;

int main(int argc, const char * argv[])
{
	// 測定用の変数を定義する
	map<int, string> objValue;
	string strValue = "value";

	// 開始時刻を取得する
	auto start = chrono::system_clock::now();
	
	// 時間がかかる処理を実行する
	for (int nCurrent = 0; nCurrent < 100000; nCurrent++)
	{
		objValue[nCurrent] = strValue;
	}

	// 終了時刻を取得する
	auto end = chrono::system_clock::now();

	// 処理にかかった時間を計算する(開始時刻-終了時刻)
	auto time = end - start;

	// 処理にかかった時間を表示する(msで表示する)
	cout << chrono::duration_cast<chrono::milliseconds>(time).count() << " ms" << endl;

	return 0;
}

実行するとこんな感じ。

4926 ms

28508_01

そんなこんなでメモってことで。