The Modern C++ Challenge 第6章

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

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

まずは目次を読む。
これだけで、お腹いっぱいになりそう。

第6章 アルゴリズムとデータ構造

  1. 優先キュー
  2. 循環バッファー
  3. ダブルバッファ
  4. 範囲内で最も頻度の高い要素
  5. テキスト ヒストグラム
  6. 電話番号リストのフィルタリング
  7. 電話番号リストの変換
  8. 文字列の順列をすべて生成する
  9. 映画の平均評価 54.ペアワイズアルゴリズム
  10. zip アルゴリズム
  11. アルゴリズムの選択
  12. ソートアルゴリズム
  13. ノード間の最短経路 59.イタチプログラム
  14. 人生ゲーム

問題文を読む。

問45 優先キュー 最大要素の一定時間の検索を提供するが、要素の追加と削除の対数時間の複雑さを持つ優先キューを表すデータ構造を記述します。
キューは最後に新しい要素を挿入し、先頭から要素を削除します。
デフォルトでは、キューは operator< を使用して要素を比較する必要がありますが、最初の引数が 2 番目の引数より小さい場合に true を返す比較関数オブジェクトをユーザーが提供できるようにする必要があります。

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

一通り実行できたので、
Modern C++ に着目して、ソースコードを読んでみる。

第48問にて ジェネリックラムダ と std::cbegin を使っている。

cpprefjp: ジェネリックラムダ

cpprefjp: std::cbegin

第60問 は コンウェイライフゲームです。

wikipedia: ライフゲーム

コンソール(標準出力)に表示しているが、見にくい。
wxWidgets を使った例を紹介する。

wxWidgets dome life

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