C++のdifftime()関数とは?構文・使い方・戻り値をわかりやすく解説
本記事では、C++標準ライブラリに含まれるdifftime()関数について、その構文、動作の仕組み、そして戻り値について詳しく解説します。
difftime()はC++に組み込まれている関数で、<ctime>ヘッダー(C言語では<time.h>)で定義されています。この関数は、time_t型の2つの引数を受け取り、2つの時刻の差を計算します。プログラムの実行時間の計測や、特定の時点からの経過時間を求める際などに活用される便利な関数です。
構文
double difftime(time_t end, time_t beginning);
第1引数には終了時刻(end)、第2引数には開始時刻(beginning)を渡します。順序を逆にすると負の値が返されるため、注意が必要です。
戻り値
2つの時刻の差が秒単位で返されます。戻り値はdouble型として格納され、小数点以下の精度も扱えます。
サンプルコード1:元日からの経過秒数を求める
以下の例では、現在時刻から今年の元日(1月1日0時0分0秒)までの経過秒数を計算しています。
#include <stdio.h>
#include <time.h>
int main () {
time_t now;
struct tm newyear;
double seconds;
time(&now); /* 現在時刻を取得 */
newyear = *localtime(&now);
newyear.tm_hour = 0; newyear.tm_min = 0; newyear.tm_sec = 0;
newyear.tm_mon = 0; newyear.tm_mday = 1;
seconds = difftime(now,mktime(&newyear));
printf ("%.f seconds since new year in the current timezone.\n", seconds);
return 0;
}出力結果
上記のコードを実行すると、以下のような出力が得られます。
3351041 seconds since new year in the current timezone.
この例では、まずtime()で現在の時刻を取得し、localtime()を使ってローカルタイムゾーンの構造体を作成します。その後、月(tm_mon)と日(tm_mday)を1月1日に設定し、時刻を0時0分0秒にリセットすることで「元日」の時刻を生成しています。mktime()でこの構造体をtime_t型に変換し、difftime()で差を求めています。
サンプルコード2:プログラムの処理時間を計測する
difftime()は、処理にかかった時間を測定する用途でもよく使われます。次の例では、繰り返し処理の実行時間を計測しています。
#include <iostream>
#include <ctime>
using namespace std;
int main() {
time_t start, ending;
long addition;
time(&start);
for (int i = 0; i < 50000; i++) {
for (int j = 0; j < 50000; j++);
}
for (int i = 0; i < 50000; i++) {
for (int j = 0; j < 50000; j++);
}
for (int i = 0; i < 50000; i++) {
for (int j = 0; j < 50000; j++);
}
time(&ending);
cout << "Total time required = " << difftime(ending, start) << " seconds " << endl;
return 0;
}出力結果
上記のコードを実行すると、以下のような出力が得られます。
Total time required = 37 seconds
このコードでは、処理開始前にtime()で開始時刻を記録し、3重のループ処理が完了した後に終了時刻を取得します。difftime()に「終了時刻、開始時刻」の順で引数を渡すことで、処理にかかった合計秒数を正の値として取得できます。
まとめ
difftime()関数は、time_t型の2つの時刻の差を秒単位(double型)で返すシンプルながら実用的な関数です。経過時間の算出やパフォーマンス計測など、時刻の差分が必要な場面で幅広く活用できます。なお、より高精度な計測が必要な場合は、C++11以降で利用可能な<chrono>ライブラリの使用も検討するとよいでしょう。
-
C++のlog()関数とは?自然対数を求める方法をわかりやすく解説
C++の標準ライブラリには、数学的な計算を行うための便利な関数が多数用意されています。その中でもlog()関数は、数値の自然対数(ネイピア数 e を底とする対数)を求めるために使用される重要な関数です。log()関数の基本情報C/C++のライブラリ関数 double log(double x) は、引数 x の自然対数(底が e の対数)を返します。この関数を使用するには、ヘッダーファイル <cmath> をインクルードする必要があります。関数の宣言double log(double x)パラメータと戻り値パラメータ: x は浮動小数点型(double)の値です。自然対数を求めたい
-
C++のswap()関数とは?2つの変数の値を入れ替える方法をサンプルコード付きで解説
swap()関数とは C++のswap()関数は、2つの値を入れ替える(交換する)ための関数です。この関数を利用すれば、一時的な第三の変数を自分で用意することなく、2つの変数の値を簡単に入れ替えることができます。 swap()関数の構文 void swap(int variable_name1, int variable_name2); 変数に値を代入してswap()関数に渡した場合、関数内では値の入れ替えが行われますが、呼び出し元の実際の変数の値は変わりません。これは、引数が「値渡し」で渡されるためです。実際の変数の値を入れ替えたい場合は、後述する「参照渡し」を使用します。 例1:s