Modern C++チャレンジ ―C++17プログラミング力を鍛える100問

Book description

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

Table of contents

  1. 大扉
  2. 原書大扉
  3. クレジット
  4. 日本語版まえがき
  5. まえがき
    1. 想定読者
    2. 本書の概要
    3. 本書を活用するために
    4. サンプルコードファイルのダウンロード
    5. コードのビルド
    6. Visual Studio 2017のプロジェクト作成
    7. Xcodeのプロジェクト作成
    8. 本書の表記法
    9. 問い合わせ先
  6. 1章 数学の問題
    1. 問題
      1. 問題1 3または5で割り切れる正の整数の総和
      2. 問題2 最大公約数
      3. 問題3 最小公倍数
      4. 問題4 与えられた正の整数より小さい最大の素数
      5. 問題5 セクシー素数
      6. 問題6 過剰数
      7. 問題7 友愛数
      8. 問題8 アームストロング数
      9. 問題9 素因数分解
      10. 問題10 グレイコード
      11. 問題11 ローマ数字に変換
      12. 問題12 最長コラッツ数列
      13. 問題13 πの計算
      14. 問題14 ISBNの検証
    2. 解答
      1. 解答1 3または5で割り切れる正の整数の総和
      2. 解答2 最大公約数
      3. 解答3 最小公倍数
      4. 解答4 与えられた正の整数より小さい最大の素数
      5. 解答5 セクシー素数
      6. 解答6 過剰数
      7. 解答7 友愛数
      8. 解答8 アームストロング数
      9. 解答9 素因数分解
      10. 解答10 グレイコード
      11. 解答11 ローマ数字に変換
      12. 解答12 最長コラッツ数列
      13. 解答13 πの計算
      14. 解答14 ISBNの検証
  7. 2章 言語機能
    1. 問題
      1. 問題15 IPv4データ型
      2. 問題16 範囲内のIPv4アドレスを列挙する
      3. 問題17 基本演算を備えた2次元配列を作る
      4. 問題18 任意個数の引数を取る最小値関数
      5. 問題19 任意個数の要素をコンテナに追加
      6. 問題20 コンテナのany, all, none関数
      7. 問題21 システムハンドルラッパー
      8. 問題22 さまざまな温度単位のリテラル
    2. 解答
      1. 解答15 IPv4データ型
      2. 解答16 範囲内のIPv4アドレスを列挙する
      3. 解答17 基本演算を備えた2次元配列を作る
      4. 解答18 任意個数の引数を取る最小値関数
      5. 解答19 任意個数の要素をコンテナに追加
      6. 解答20 コンテナのany, all, none関数
      7. 解答21 システムハンドルラッパー
      8. 解答22 さまざまな温度単位のリテラル
  8. 3章 文字列と正規表現
    1. 問題
      1. 問題23 バイナリから文字列への変換
      2. 問題24 文字列からバイナリへの変換
      3. 問題25 英文タイトルのキャピタライズ
      4. 問題26 指定した区切り文字で文字列を連結する
      5. 問題27 区切り文字集合で文字列をトークンに分割する
      6. 問題28 最長回文部分文字列
      7. 問題29 ナンバープレートの検証
      8. 問題30 URLパーツの抽出
      9. 問題31 文字列の日付を変換する
    2. 解答
      1. 解答23 バイナリから文字列への変換
      2. 解答24 文字列からバイナリへの変換
      3. 解答25 英文タイトルのキャピタライズ
      4. 解答26 指定した区切り文字で文字列を連結する
      5. 解答27 区切り文字集合で文字列をトークンに分割する
      6. 解答28 最長回文部分文字列
      7. 解答29 ナンバープレートの検証
      8. 解答30 URLパーツの抽出
      9. 解答31 文字列の日付を変換する
  9. 4章 ストリームとファイルシステム
    1. 問題
      1. 問題32 パスカルの三角形
      2. 問題33 プロセスのリストを表形式で出力する
      3. 問題34 テキストファイルから空行を取り除く
      4. 問題35 ディレクトリのサイズを計算する
      5. 問題36 指定日付より古いファイルを削除する
      6. 問題37 ディレクトリ内で正規表現にマッチするファイルを見つける
      7. 問題38 一時ログファイル
    2. 解答
      1. 解答32 パスカルの三角形
      2. 解答33 プロセスのリストを表形式で出力する
      3. 解答34 テキストファイルから空行を取り除く
      4. 解答35 ディレクトリのサイズを計算する
      5. 解答36 指定日付より古いファイルを削除する
      6. 解答37 ディレクトリ内で正規表現にマッチするファイルを見つける
      7. 解答38 一時ログファイル
  10. 5章 日付と時間
    1. 問題
      1. 問題39 実行時間を測定する関数
      2. 問題40 2つの日付間の日数
      3. 問題41 曜日
      4. 問題42 年間の日と週
      5. 問題43 複数のタイムゾーンにおける打ち合わせ時刻
      6. 問題44 月間カレンダー
    2. 解答
      1. 解答39 実行時間を測定する関数
      2. 解答40 2つの日付間の日数
      3. 解答41 曜日
      4. 解答42 年間の日と週
      5. 解答43 複数のタイムゾーンにおける打ち合わせ時刻
      6. 解答44 月間カレンダー
  11. 6章 アルゴリズムとデータ構造
    1. 問題
      1. 問題45 優先度付きキュー
      2. 問題46 リングバッファ
      3. 問題47 ダブルバッファ
      4. 問題48 要素列の最頻出要素
      5. 問題49 テキストヒストグラム
      6. 問題50 電話番号のリストをフィルタリング
      7. 問題51 電話番号のリストの変換
      8. 問題52 文字列の文字の順列を生成
      9. 問題53 映画の平均評価
      10. 問題54 ペア作成アルゴリズム
      11. 問題55 Zipアルゴリズム
      12. 問題56 選択アルゴリズム
      13. 問題57 ソートアルゴリズム
      14. 問題58 ノード間の最短経路
      15. 問題59 イタチプログラム
      16. 問題60 ライフゲーム
    2. 解答
      1. 解答45 優先度付きキュー
      2. 解答46 リングバッファ
      3. 解答47 ダブルバッファ
      4. 解答48 要素列の最頻出要素
      5. 解答49 テキストヒストグラム
      6. 解答50 電話番号のリストをフィルタリング
      7. 解答51 電話番号のリストの変換
      8. 解答52 文字列の文字の順列を生成
      9. 解答53 映画の平均評価
      10. 解答54 ペア作成アルゴリズム
      11. 解答55 Zipアルゴリズム
      12. 解答56 選択アルゴリズム
      13. 解答57 ソートアルゴリズム
      14. 解答58 ノード間の最短経路
      15. 解答59 イタチプログラム
      16. 解答60 ライフゲーム
  12. 7章 並行処理
    1. 問題
      1. 問題61 並列変換アルゴリズム
      2. 問題62 スレッドを用いた、最小最大要素を求める並列アルゴリズム
      3. 問題63 非同期関数を用いた、最小最大要素を求める並列アルゴリズム
      4. 問題64 並列ソートアルゴリズム
      5. 問題65 コンソールへのスレッドセーフなロギング出力
      6. 問題66 カスタマーサービスシステム
    2. 解答
      1. 解答61 並列変換アルゴリズム
      2. 解答62 スレッドを用いた、最小最大要素を求める並列アルゴリズム
      3. 解答63 非同期関数を用いた、最小最大要素を求める並列アルゴリズム
      4. 解答64 並列ソートアルゴリズム
      5. 解答65 コンソールへのスレッドセーフなロギング出力
      6. 解答66 カスタマーサービスシステム
  13. 8章 デザインパターン
    1. 問題
      1. 問題67 パスワードの検証
      2. 問題68 ランダムなパスワード生成
      3. 問題69 社会保障番号の生成
      4. 問題70 承認システム
      5. 問題71 観察可能なベクトルコンテナ
      6. 問題72 値引きした価格を計算
    2. 解答
      1. 解答67 パスワードの検証
      2. 解答68 ランダムなパスワード生成
      3. 解答69 社会保障番号の生成
      4. 解答70 承認システム
      5. 解答71 観察可能なベクトルコンテナ
      6. 解答72 値引きした価格を計算
  14. 9章 データシリアライゼーション
    1. 問題
      1. 問題73 データをXMLにシリアライズする、XMLからデータをデシリアライズする
      2. 問題74 XPathを使ってXMLからデータを抽出する
      3. 問題75 データをJSONにシリアライズする
      4. 問題76 JSONからデータをデシリアライズする
      5. 問題77 映画のリストをPDFに出力する
      6. 問題78 画像を集めてPDFを作る
    2. 解答
      1. 解答73 データをXMLにシリアライズする、XMLからデータをデシリアライズする
      2. 解答74 XPathを使ってXMLからデータを抽出する
      3. 解答75 データをJSONにシリアライズする
      4. 解答76 JSONからデータをデシリアライズする
      5. 解答77 映画のリストをPDFに出力する
      6. 解答78 画像を集めてPDFを作る
  15. 10章 アーカイブ、画像、データベース
    1. 問題
      1. 問題79 Zipアーカイブにあるファイルを探し出す
      2. 問題80 ファイルをZipアーカイブに圧縮したり、Zipアーカイブからファイルを解凍する
      3. 問題81 パスワードを付けて、ファイルをZipアーカイブに圧縮したり、Zipアーカイブからファイルを解凍する
      4. 問題82 国旗を表すPNGを作る
      5. 問題83 認証用テキスト付きPNG画像を作る
      6. 問題84 EAN-13バーコード作成器
      7. 問題85 SQLiteデータベースから映画を読み込む
      8. 問題86 SQLiteデータベースに映画をトランザクションで挿入する
      9. 問題87 SQLiteデータベースで映画の画像を扱う
    2. 解答
      1. 解答79 Zipアーカイブにあるファイルを探し出す
      2. 解答80 ファイルをZipアーカイブに圧縮したり、Zipアーカイブからファイルを解凍する
      3. 解答81 パスワードを付けて、ファイルをZipアーカイブに圧縮したり、Zipアーカイブからファイルを解凍する
      4. 解答82 国旗を表すPNGを作る
      5. 解答83 認証用テキスト付きPNG画像を作る
      6. 解答84 EAN-13バーコード作成器
      7. 解答85 SQLiteデータベースから映画を読み込む
      8. 解答86 SQLiteデータベースに映画をトランザクションで挿入する
      9. 解答87 SQLiteデータベースで映画の画像を扱う
  16. 11章 暗号
    1. 問題
      1. 問題88 シーザー暗号
      2. 問題89 ヴィジュネル暗号
      3. 問題90 base64符号化と復号
      4. 問題91 ユーザの資格情報を検証する
      5. 問題92 ファイルのハッシュを計算する
      6. 問題93 ファイルの暗号化と復号
      7. 問題94 ファイル署名
    2. 解答
      1. 解答88 シーザー暗号
      2. 解答89 ヴィジュネル暗号
      3. 解答90 base64符号化と復号
      4. 解答91 ユーザの資格情報を検証する
      5. 解答92 ファイルのハッシュを計算する
      6. 解答93 ファイルの暗号化と復号
      7. 解答94 ファイル署名
  17. 12章 ネットワークとサービス
    1. 問題
      1. 問題95 ホストのIPアドレスを調べる
      2. 問題96 クライアント・サーバFizz-Buzz
      3. 問題97 ビットコインの交換レート
      4. 問題98 IMAPを使って電子メールを取得
      5. 問題99 テキストを任意の指定された言語に翻訳する
      6. 問題100 画像内にある顔を検出する
    2. 解答
      1. 解答95 ホストのIPアドレスを調べる
      2. 解答96 クライアント・サーバFizz-Buzz
      3. 解答97 ビットコインの交換レート
      4. 解答98 IMAPを使って電子メールを取得
      5. 解答99 テキストを任意の指定された言語に翻訳する
      6. 解答100 画像内にある顔を検出する
  18. 付録A 参考文献
    1. A.1 論文等
    2. A.2 ライブラリドキュメント
  19. 訳者あとがき
  20. 著者・訳者紹介
  21. 奥付

Product information

  • Title: Modern C++チャレンジ ―C++17プログラミング力を鍛える100問
  • Author(s): Marius Bancila, 黒川 利明, 島 敏博
  • Release date: February 2019
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873118697

You might also like

book

マイクロフロントエンド ―マイクロサービスアーキテクチャの概念をフロントエンドに拡張し、信頼性、自律性の高いシステムを構築する

by Luca Mezzalira, 嶋田 健志

DAZNでアーキテクトを務めた著者が、マイクロフロントエンドアーキテクチャの概念、長所と短所、導入のポイントなどを俯瞰的に説明します。プロジェクトに適したアーキテクチャをどのように見極めるべきかについて、デプロイ可能性、モジュール性、テスト容易性、パフォーマンス、開発者体験といった観点から、多角的に分析することの重要性を強調します。また、マイクロフロントエンドを導入する予定がない組織にとっても、自律性、生産性の高いチーム作りのヒントを得ることができます。巻末の付録では、開発の最前線で活躍する8人にインタビュー。マイクロフロントエンドの威力、可能性、落とし穴など、開発現場の貴重な「生の声」を収録。一筋縄ではいかない開発の風景を垣間見ることができます。実装サンプルはすべてGitHubから利用可能です。

video

30分でわかる『システム運用アンチパターン』

by 田中 裕一

書籍『システム運用アンチパターン』の特徴は、DevOpsによる組織の変革に向けて、現場のエンジニアが具体的にできることをアンチパターンとその解決方法を通じて示していくという点にあります。この動画では、本書の翻訳者である田中裕一氏が、本書で言及されるアンチパターンの概要を紹介します。

book

動かして学ぶ量子コンピュータプログラミング ―シミュレータとサンプルコードで理解する基本アルゴリズム

by Eric R. Johnston, Nic Harrigan, Mercedes Gimeno-Segovia, 北野 章, 丸山 耕司

独自のシミュレータQCEngineを使ってJavaScriptで書かれたサンプルプログラムをブラウザ上で動かし、量子コンピュータでのプログラミングに必要な知識やスキルを学ぶことができます。量子コンピューティングの基礎とその可能性に関する直感的理解が容易になるよう、豊富な例と図を用いて説明します。前半では、単一キュビットに対する基本的な量子演算、多重キュビット演算、複合演算(量子プリミティブ)、基本的な量子アプリケーション、後半では、探索問題、画像処理、暗号問題、機械学習への応用について解説しており、本書だけで基礎から実践的な応用技術までを一気に習得できます。

book

Go言語によるWebアプリケーション開発

by Mat Ryer, 鵜飼 文敏, 牧野 聡

Goプログラミングについて一歩踏み込んだプロユースの解説書。読者はシンプルなコードを書きながら、実運用アプリケーションの開発で使うスキルとテクニックを学ぶことができます。本書のサンプルプログラムはどれもシンプルですがとても実践的です。拡張性、並行処理、高可用性といったエンタープライズアプリケーションの開発で直面する現実的な問題に対するソリューションが含まれています。本書を読めば、実際の業務に必要な技能――Goによる開発手法および関連技術の使い方――をマスターし、ツールやプログラムの開発スキルを迅速かつ簡単に向上できます。日本語版では、監訳者の鵜飼文敏氏による巻末付録「Goらしいコードの書き方」を収録しました。