The Modern C++ Challenge 第5章

The Modern C++ Challenge 第4章 の続きです。

今回は第5章に挑戦します。

まずは目次を読む。

第4章 日付と時間

  1. 計測機能実行時間
  2. 2 つの日付の間の日数
  3. 曜日
  4. 年間通算日と週
  5. 複数のタイムゾーンの会議時間
  6. 月間カレンダー

問題文を読む。

問39 関数の実行時間の測定
関数の実行時間を (任意の数の引数で) 必要な期間 (秒、ミリ秒、マイクロ秒など) で測定できる関数を作成します。

ソースコードを斜め読みして実行する。

第40問 から 第44問 にて Date ライブラリを使っている。

github: Date

第43問は、すんなり実行できなかった。 tz.cpp を一緒にビルドする。 これが libcurl を必要とする。 下記のようなビルドコマンドになった。

g++ main.cpp ../../libs/date/src/tz.cpp -Wall -Werror -std=c++11 -I../../libs/date/include/ -I../../libs/date/include/date/ pkg-config --cflags --libs libcurl -o bin/problem_43

date: tz.cpp

libcurl

さらに実行時に tzdata を必要とする。

iana: tzdata

複数のタイムゾーンに対応しているライブラリとして cctz を紹介する。
Macの場合、brewコマンドでインストールできるので、 手間がかからない。

github: cctz

一通り実行できたので、
Modern C++ に着目して、ソースコードを読んでみる。
第5章には Modern C++ というところは見当たらなかった。

C言語に書き直してみた。 カレンダーは難しいかと思ったが、 ツェラーの公式を使って、すんなり書けた。

ツェラーの公式

第5章 のソースコードGithub に公開した。
https://github.com/ohwada/The-Modern-Cpp-Challenge/tree/main/The-Modern-Cpp-Challenge/Chapter05