Modern C++チャレンジ

―C++17プログラミング力を鍛える100問

[cover photo]
TOPICS
Programming , C/C++
発行年月日
PRINT LENGTH
332
ISBN
978-4-87311-869-7
原書
The Modern C++ Challenge
FORMAT
Print PDF EPUB
Ebook
3,740円
Ebookを購入する
Print
3,740円

数学の問題から、文字列処理、日付と時刻、並行処理、暗号、ネットワークまで、多岐にわたる100の問題を集め、その解法をC++で示します。ポピュラーで古典的な数学の問題をはじめ、C++17でのファイル操作やC++20での実行時間の計測、デザインパターン、テキスト翻訳、画像から顔検出など、身近で興味のわく魅力的な問題が多数収録されています。あらゆるレベルのC++プログラマはもちろん、これからC++を始める人にとっても、C++で何ができるのか、どのように書くのかを実際に手を動かしながら学び、プログラミングスキルをレベルアップすることができます。最新のC++17対応。

目次

日本語版まえがき
まえがき

1章 数学の問題
    問題
        問題1 3または5で割り切れる正の整数の総和
        問題2 最大公約数
        問題3 最小公倍数
        問題4 与えられた正の整数より小さい最大の素数
        問題5 セクシー素数
        問題6 過剰数
        問題7 友愛数
        問題8 アームストロング数
        問題9 素因数分解
        問題10 グレイコード
        問題11 ローマ数字に変換
        問題12 最長コラッツ数列
        問題13 πの計算
        問題14  ISBNの検証
    解答
        解答1 3または5で割り切れる正の整数の総和
        解答2 最大公約数
        解答3 最小公倍数
        解答4 与えられた正の整数より小さい最大の素数
        解答5 セクシー素数
        解答6 過剰数
        解答7 友愛数
        解答8 アームストロング数
        解答9 素因数分解
        解答10 グレイコード
        解答11 ローマ数字に変換
        解答12 最長コラッツ数列
        解答13 πの計算
        解答14  ISBNの検証

2章 言語機能
     問題
        問題15  IPv4データ型
        問題16 範囲内のIPv4アドレスを列挙する
        問題17 基本演算を備えた2次元配列を作る
        問題18 任意個数の引数を取る最小値関数
        問題19 任意個数の要素をコンテナに追加
        問題20 コンテナのany, all, none関数
        問題21 システムハンドルラッパー
        問題22 さまざまな温度単位のリテラル
    解答
        解答15  IPv4データ型
        解答16 範囲内のIPv4アドレスを列挙する
        解答17 基本演算を備えた2次元配列を作る
        解答18 任意個数の引数を取る最小値関数
        解答19 任意個数の要素をコンテナに追加
        解答20 コンテナのany, all, none関数
        解答21 システムハンドルラッパー
        解答22 さまざまな温度単位のリテラル

3章 文字列と正規表現
     問題
        問題23 バイナリから文字列への変換
        問題24 文字列からバイナリへの変換
        問題25 英文タイトルのキャピタライズ
        問題26 指定した区切り文字で文字列を連結する
        問題27 区切り文字集合で文字列をトークンに分割する
        問題28 最長回文部分文字列
        問題29 ナンバープレートの検証
        問題30  URLパーツの抽出
        問題31 文字列の日付を変換する
    解答
        解答23 バイナリから文字列への変換
        解答24 文字列からバイナリへの変換
        解答25 英文タイトルのキャピタライズ
        解答26 指定した区切り文字で文字列を連結する
        解答27 区切り文字集合で文字列をトークンに分割する
        解答28 最長回文部分文字列
        解答29 ナンバープレートの検証
        解答30  URLパーツの抽出
        解答31 文字列の日付を変換する

4章 ストリームとファイルシステム
    問題
        問題32 パスカルの三角形
        問題33 プロセスのリストを表形式で出力する
        問題34 テキストファイルから空行を取り除く
        問題35 ディレクトリのサイズを計算する
        問題36 指定日付より古いファイルを削除する
        問題37 ディレクトリ内で正規表現にマッチするファイルを見つける
        問題38 一時ログファイル
    解答
        解答32 パスカルの三角形
        解答33 プロセスのリストを表形式で出力する
        解答34 テキストファイルから空行を取り除く
        解答35 ディレクトリのサイズを計算する
        解答36 指定日付より古いファイルを削除する
        解答37 ディレクトリ内で正規表現にマッチするファイルを見つける
        解答38 一時ログファイル

5章 日付と時間
    問題
        問題39 実行時間を測定する関数
        問題40  2つの日付間の日数
        問題41 曜日
        問題42 年間の日と週
        問題43 複数のタイムゾーンにおける打ち合わせ時刻
        問題44 月間カレンダー
    解答
        解答39 実行時間を測定する関数
        解答40  2つの日付間の日数
        解答41 曜日
        解答42 年間の日と週
        解答43 複数のタイムゾーンにおける打ち合わせ時刻
        解答44 月間カレンダー

6章 アルゴリズムとデータ構造
    問題
        問題45 優先度付きキュー
        問題46 リングバッファ
        問題47 ダブルバッファ
        問題48 要素列の最頻出要素
        問題49 テキストヒストグラム
        問題50 電話番号のリストをフィルタリング
        問題51 電話番号のリストの変換
        問題52 文字列の文字の順列を生成
        問題53 映画の平均評価
        問題54 ペア作成アルゴリズム
        問題55  Zipアルゴリズム
        問題56 選択アルゴリズム
        問題57 ソートアルゴリズム
        問題58 ノード間の最短経路
        問題59 イタチプログラム
        問題60 ライフゲーム
    解答
        解答45 優先度付きキュー
        解答46 リングバッファ
        解答47 ダブルバッファ
        解答48 要素列の最頻出要素
        解答49 テキストヒストグラム
        解答50 電話番号のリストをフィルタリング
        解答51 電話番号のリストの変換
        解答52 文字列の文字の順列を生成
        解答53 映画の平均評価
        解答54 ペア作成アルゴリズム
        解答55  Zipアルゴリズム
        解答56 選択アルゴリズム
        解答57 ソートアルゴリズム
        解答58 ノード間の最短経路
        解答59 イタチプログラム
        解答60 ライフゲーム

7章 並行処理
     問題
        問題61 並列変換アルゴリズム
        問題62 スレッドを用いた、最小最大要素を求める並列アルゴリズム
        問題63 非同期関数を用いた、最小最大要素を求める並列アルゴリズム
        問題64 並列ソートアルゴリズム
        問題65 コンソールへのスレッドセーフなロギング出力
        問題66 カスタマーサービスシステム
    解答
        解答61 並列変換アルゴリズム
        解答62 スレッドを用いた、最小最大要素を求める並列アルゴリズム
        解答63 非同期関数を用いた、最小最大要素を求める並列アルゴリズム
        解答64 並列ソートアルゴリズム
        解答65 コンソールへのスレッドセーフなロギング出力
        解答66 カスタマーサービスシステム

8章 デザインパターン
    問題
        問題67 パスワードの検証
        問題68 ランダムなパスワード生成
        問題69 社会保障番号の生成
        問題70 承認システム
        問題71 観察可能なベクトルコンテナ
        問題72 値引きした価格を計算
    解答
        解答67 パスワードの検証
        解答68 ランダムなパスワード生成
        解答69 社会保障番号の生成
        解答70 承認システム
        解答71 観察可能なベクトルコンテナ
        解答72 値引きした価格を計算

9章 データシリアライゼーション
    問題
        問題73 データをXMLにシリアライズする、XMLからデータをデシリアライズする
        問題74  XPathを使ってXMLからデータを抽出する
        問題75 データをJSONにシリアライズする
        問題76  JSONからデータをデシリアライズする
        問題77 映画のリストをPDFに出力する
        問題78 画像を集めてPDFを作る
    解答
        解答73 データをXMLにシリアライズする、XMLからデータをデシリアライズする
        解答74  XPathを使ってXMLからデータを抽出する
        解答75 データをJSONにシリアライズする
        解答76  JSONからデータをデシリアライズする
        解答77 映画のリストをPDFに出力する
        解答78 画像を集めてPDFを作る

10章 アーカイブ、画像、データベース
     問題
        問題79  Zipアーカイブにあるファイルを探し出す
        問題80 ファイルをZipアーカイブに圧縮したり、Zipアーカイブからファイルを解凍する
        問題81 パスワードを付けて、ファイルをZipアーカイブに圧縮したり、Zipアーカイブからファイルを解凍する
        問題82 国旗を表すPNGを作る
        問題83 認証用テキスト付きPNG画像を作る
        問題84  EAN-13バーコード作成器
        問題85  SQLiteデータベースから映画を読み込む
        問題86  SQLiteデータベースに映画をトランザクションで挿入する
        問題87  SQLiteデータベースで映画の画像を扱う
    解答
        解答79  Zipアーカイブにあるファイルを探し出す
        解答80 ファイルをZipアーカイブに圧縮したり、Zipアーカイブからファイルを解凍する
        解答81 パスワードを付けて、ファイルをZipアーカイブに圧縮したり、Zipアーカイブからファイルを解凍する
        解答82 国旗を表すPNGを作る
        解答83 認証用テキスト付きPNG画像を作る
        解答84  EAN-13バーコード作成器
        解答85  SQLiteデータベースから映画を読み込む
        解答86  SQLiteデータベースに映画をトランザクションで挿入する
        解答87  SQLiteデータベースで映画の画像を扱う

11章 暗号
     問題
        問題88 シーザー暗号
        問題89 ヴィジュネル暗号
        問題90  base64符号化と復号
        問題91 ユーザの資格情報を検証する
        問題92 ファイルのハッシュを計算する
        問題93 ファイルの暗号化と復号
        問題94 ファイル署名
    解答
        解答88 シーザー暗号
        解答89 ヴィジュネル暗号
        解答90  base64符号化と復号
        解答91 ユーザの資格情報を検証する
        解答92 ファイルのハッシュを計算する
        解答93 ファイルの暗号化と復号
        解答94 ファイル署名

12章 ネットワークとサービス
     問題
        問題95 ホストのIPアドレスを調べる
        問題96 クライアント・サーバFizz-Buzz
        問題97 ビットコインの交換レート
        問題98  IMAPを使って電子メールを取得
        問題99 テキストを任意の指定された言語に翻訳する
        問題100 画像内にある顔を検出する
    解答
        解答95 ホストのIPアドレスを調べる
        解答96 クライアント・サーバFizz-Buzz
        解答97 ビットコインの交換レート
        解答98  IMAPを使って電子メールを取得
        解答99 テキストを任意の指定された言語に翻訳する
        解答100 画像内にある顔を検出する

付録A 参考文献
    A.1 論文等
    A.2 ライブラリドキュメント

訳者あとがき
索引