Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions public/docs/cpp/0-intro/1-1-feature.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ question:
他の言語と比較したC++の特徴は以下の通りです。

* **パフォーマンス 🚀:** C++は、OSやハードウェアに近い低レベルな操作が可能で、実行速度が非常に高速です。このため、パフォーマンスが最重要視される場面で絶大な信頼を得ています。
* **静的型付け:** 変数の型はコンパイル時に決定されます。これにより、実行前に多くのエラーを発見でき、大規模な開発でもコードの安全性を保ちやすくなります。
* **静的型付け:** [[変数]]の型は[[コンパイル]]時に決定されます。これにより、実行前に多くのエラーを発見でき、大規模な開発でもコードの安全性を保ちやすくなります。
* **マルチパラダイム:** 手続き型プログラミング、オブジェクト指向プログラミング、ジェネリックプログラミングなど、様々なプログラミングスタイルをサポートしています。これにより、問題の性質に合わせて最適なアプローチを選択できます。
* **C言語との互換性:** C言語のコードの多くは、ほとんどそのままC++のコードとしてコンパイルできます。C言語で書かれた膨大なソフトウェア資産を活用できるのは大きな利点です。
* **C言語との互換性:** C言語のコードの多くは、ほとんどそのままC++のコードとして[[コンパイル]]できます。C言語で書かれた膨大なソフトウェア資産を活用できるのは大きな利点です。
2 changes: 2 additions & 0 deletions public/docs/cpp/0-intro/3-1-run.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ question:
- コンパイルに失敗した場合、どのようなメッセージが表示されますか?
- なぜPythonやJavaScriptはコンパイルが不要なのですか?
- コンパイルすると、どのようなファイルが生成されますか?
term:
- コンパイル
---

### コンパイルと実行
Expand Down
4 changes: 3 additions & 1 deletion public/docs/cpp/0-intro/4-1-include.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ question:
- iostreamがないとstd::coutは使えないのですか?
- ヘッダファイルとは何ですか?
- '#includeを書き忘れたらどうなりますか?'
term:
- インクルード
---

### `#include <iostream>` - ヘッダファイルのインクルード

`#include` は、他のファイルに書かれた機能を利用するための**プリプロセッサ命令**です。ここでは、コンソールへの入出力機能を提供する `iostream` という標準ライブラリのヘッダファイルを読み込んでいます。これにより、`std::cout` などが使えるようになります。

* `< >` で囲む: 標準ライブラリのヘッダファイルをインクルードする場合
* `" "` で囲む: 自分で作成したヘッダファイルをインクルードする場合 (後の章で学びます)
* `" "` で囲む: 自分で作成したヘッダファイルをインクルードする場合 ([[./5]]で学びます)
3 changes: 3 additions & 0 deletions public/docs/cpp/0-intro/4-2-main.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ question:
- main関数は必ずint型を返さなければなりませんか?
- return 0;と書かないとどうなりますか?
- 引数を取るmain関数はどのような場合に使うのですか?
term:
- main関数
- main 関数
---

### `int main()` - main関数
Expand Down
6 changes: 3 additions & 3 deletions public/docs/cpp/0-intro/4-3-namespace.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ question:

### `std::cout` と `std::endl` - 名前空間 (namespace)

* `std::cout`: "character output stream" の略で、コンソールへの標準出力を担当します。
* [[`std::cout`]]: "character output stream" の略で、コンソールへの標準出力を担当します。
* `<<`: **ストリーム挿入演算子**と呼ばれ、右側のデータを左側のストリーム(ここでは `std::cout`)に流し込むイメージです。
* `std::endl`: "end line" の略で、改行を出力し、出力バッファをフラッシュ(強制的に出力)します。
* `std::`: `cout` や `endl` が `std` という**名前空間 (namespace)** に属していることを示します。名前空間は、大規模なプログラムで関数や変数の名前が衝突するのを防ぐための仕組みです。`std` はC++の標準ライブラリが定義されている名前空間です。
* [[`std::endl`]]: "end line" の略で、改行を出力し、出力バッファをフラッシュ(強制的に出力)します。
* `std::`: `cout` や `endl` が `std` という**名前空間 (namespace)** に属していることを示します。名前空間は、大規模なプログラムで関数や[[変数]]の名前が衝突するのを防ぐための仕組みです。`std` はC++の標準ライブラリが定義されている名前空間です。
6 changes: 3 additions & 3 deletions public/docs/cpp/0-intro/5-0-summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ question: []
## この章のまとめ

* C++は、**パフォーマンス**と**多機能性**を両立した強力なプログラミング言語です。
* C++の開発フローは、「**ソースコード作成 → コンパイル → 実行**」が基本です。
* すべてのC++プログラムは `main` 関数から実行が始まります
* C++の開発フローは、「**ソースコード作成 → [[コンパイル]] → 実行**」が基本です。
* すべてのC++プログラムは [[`main` 関数]]から実行が始まります
* `#include` で外部ライブラリの機能を読み込み、`namespace` で名前の衝突を避けます。

これであなたもC++プログラマの仲間入りです!次の章では、C++の根幹をなす型システムとメモリの仕組みについて学んでいきましょう。
これであなたもC++プログラマの仲間入りです![[./next]]では、C++の根幹をなす型システムとメモリの仕組みについて学んでいきましょう。
2 changes: 1 addition & 1 deletion public/docs/cpp/1-types-control/-intro.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
C++は**静的型付け言語**です。PythonやJavaScriptのような動的型付け言語とは異なり、コンパイル時に変数の型が確定している必要があります。これにより、実行時のエラーを未然に防ぎ、高いパフォーマンスを実現します。
C++は**静的型付け言語**です。PythonやJavaScriptのような動的型付け言語とは異なり、[[コンパイル]]時に[[変数]]の型が確定している必要があります。これにより、実行時のエラーを未然に防ぎ、高いパフォーマンスを実現します。
16 changes: 14 additions & 2 deletions public/docs/cpp/1-types-control/1-0-basic-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@ question:
- charとstd::stringはどちらも文字を扱うのに使うようですが、違いは何ですか?
- 変数のサイズが環境によって異なる場合があるとは、どういうことですか?
- intが32bit以上であることが保証されているというのは、どういう意味ですか?
term:
- 基本型
- 整数型
- 浮動小数点型
- 文字型
- ブール型
- int
- long
- double
- float
- char
- bool
---

## 基本的なデータ型
Expand All @@ -16,7 +28,7 @@ C++には多くの型がありますが、まずは以下の基本型を押さ

* **整数型**: `int` (通常4バイト), `long long` (8バイト, 大きな整数)
* **浮動小数点型**: `double` (倍精度, 基本的にこれを使う), `float` (単精度)
* **文字型**: `char` (1バイト文字), `std::string` (文字列クラス。厳密には基本型ではありませんが、実用上必須)
* **文字型**: `char` (1バイト文字), `std::string` ([[文字列]]クラス。厳密には基本型ではありませんが、実用上必須)
* **ブール型**: `bool` (`true` または `false`)

C++では変数のサイズ(ビット幅)が環境によって異なる場合がありますが、現代的な環境では `int` は32bit以上であることが保証されています。
C++では[[変数]]のサイズ(ビット幅)が環境によって異なる場合がありますが、現代的な環境では `int` は32bit以上であることが保証されています。
5 changes: 4 additions & 1 deletion public/docs/cpp/1-types-control/2-0-uniform-init.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,16 @@ question:
- int height{170.5}; のようにエラーになる方が安全とはどういうことですか?
- int rough_height = 170.9; のように値が切り捨てられてしまうのは、問題ないのでしょうか?
- 常に波括弧{}で初期化すれば良いのでしょうか?
term:
- 変数
- 初期化
---

## 変数の初期化:ユニフォーム初期化 `{}`

C++には変数を初期化する方法がいくつもありますが、C++11以降では **波括弧 `{}` を使った初期化(ユニフォーム初期化)** が推奨されています。

なぜ `{}` が良いのでしょうか? それは、**縮小変換(Narrowing Conversion)** を防げるからです。例えば、少数のデータを整数型変数に無理やり入れようとした時、`=` なら黙って切り捨てられますが、`{}` ならコンパイルエラーにしてくれます。
なぜ `{}` が良いのでしょうか? それは、**縮小変換(Narrowing Conversion)** を防げるからです。例えば、小数のデータを[[整数型]]変数に無理やり入れようとした時、`=` なら黙って切り捨てられますが、`{}` ならコンパイルエラーにしてくれます。

```cpp:initialization.cpp
#include <iostream>
Expand Down
4 changes: 3 additions & 1 deletion public/docs/cpp/1-types-control/3-1-const.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ question:
- constを付け忘れた場合、どのような問題が起こりうるのですか?
- PIのように定数を宣言するとき、変数名を大文字にするのはルールですか?
- constはどんなデータ型にでも使えるのですか?
term:
- const
---

### `const`による不変性の保証

`const` (constantの略) は、変数を**読み取り専用**にするためのキーワードです。一度`const`で初期化された変数の値は、後から変更しようとするとコンパイルエラーになります。
`const` (constantの略) は、[[変数]]を**読み取り専用**にするためのキーワードです。一度`const`で初期化された[[変数]]の値は、後から変更しようとするとコンパイルエラーになります。

なぜ`const`が重要なのでしょうか?

Expand Down
6 changes: 4 additions & 2 deletions public/docs/cpp/1-types-control/3-2-auto.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ question:
- autoを使いすぎるとコードが読みにくくなることはありませんか?
- auto z = "hello"; がconst char* になるのはなぜですか?std::stringにはならないのですか?
- autoを使うことで、プログラムの実行速度に影響はありますか?
term:
- auto
---

### `auto`による型推論

C++11から導入された`auto`キーワードを使うと、コンパイラが初期化式から変数の型を自動で推論してくれます。これにより、特に型名が長い場合にコードを簡潔に書くことができます。
C++11から導入された`auto`キーワードを使うと、コンパイラが初期化式から[[変数]]の型を自動で推論してくれます。これにより、特に型名が長い場合にコードを簡潔に書くことができます。

```cpp
// autoを使わない場合
Expand All @@ -21,7 +23,7 @@ std::vector<int>::iterator it = my_vector.begin();
auto it = my_vector.begin(); // コンパイラが it の型を std::vector<int>::iterator と推論してくれる
```

ただし、`auto`はあくまで「型を書く手間を省く」ものであり、変数が型を持たないわけではありません(動的型付け言語とは異なります)。初期化と同時に使う必要があり、型が明確な場面で適切に使うことが推奨されます。
ただし、`auto`はあくまで「型を書く手間を省く」ものであり、[[変数]]が型を持たないわけではありません(動的型付け言語とは異なります)。初期化と同時に使う必要があり、型が明確な場面で適切に使うことが推奨されます。

```cpp
auto x = 10; // x は int型になる
Expand Down
4 changes: 4 additions & 0 deletions public/docs/cpp/1-types-control/4-0-console.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ question:
- std::endlは「バッファをフラッシュする」とありますが、バッファをフラッシュするとはどういうことですか?
- キーボードから複数の値を入力する際、値と値の間はスペースで区切れば良いのですか?
- 数値が期待される入力に対して文字列が入力された場合など、入力エラーへの対処はどうすれば良いですか?
term:
- std::cout
- std::cin
- std::endl
---

## コンソール入出力 (`std::cin`, `std::cout`)
Expand Down
2 changes: 2 additions & 0 deletions public/docs/cpp/1-types-control/5-1-if.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ question:
- if文の条件式はboolに変換可能なものである必要があるとありますが、具体的にどういうことですか?
- if文の中にさらにif文を入れることはできますか?
- else ifやelseは必ず書かないといけないものですか?
term:
- if
---

### `if`文
Expand Down
7 changes: 6 additions & 1 deletion public/docs/cpp/1-types-control/5-2-switch.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,16 @@ question:
- breakを書き忘れた場合、プログラムはどのように動作するのですか?
- switch文のcaseに書ける値の型に制限はありますか?
- defaultのcaseは必ず書くべきですか?
term:
- switch
---

### `switch`文とフォールスルー

`switch` 文は `break` を書かない限り、次の `case` へ処理が流れます(フォールスルー)。意図的なフォールスルーでない限り、`break` を忘れないように注意が必要です。C++17以降では `[[fallthrough]];` 属性をつけることで、「意図的なものである」とコンパイラに伝え、警告を抑制できます。
`switch` 文は `break` を書かない限り、次の `case` へ処理が流れます(フォールスルー)。意図的なフォールスルーでない限り、`break` を忘れないように注意が必要です。

> [!TIP]
> C++17以降では `[[fallthrough]];` 属性をつけることで、「意図的なものである」とコンパイラに伝え、警告を抑制できます。

```cpp:control-switch.cpp
#include <iostream>
Expand Down
5 changes: 3 additions & 2 deletions public/docs/cpp/1-types-control/5-3-loop.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ question:
- whileループの具体的な使い方の例も見てみたいです。
- 無限ループを防ぐためにはどうすれば良いですか?
- ループを途中で抜け出す方法や、次のイテレーションに進む方法はC++にもありますか?
term:
- while
- for
---

### ループ構文

`while`, `for` も標準的です。

```cpp:control-loop.cpp
#include <iostream>

Expand Down
8 changes: 4 additions & 4 deletions public/docs/cpp/1-types-control/6-0-summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ question: []

## この章のまとめ

* **型システム**: `int`, `double`, `bool` などの基本型があり、静的に管理される。
* **初期化**: `int x{10};` のような波括弧 `{}` を使う初期化が推奨される(縮小変換の防止)。
* **型推論と定数**: `auto` で型推論を行い、変更しない変数には `const` を付ける。
* **入出力**: `std::cout`, `std::cin` を使い、`<<`, `>>` 演算子でデータを流す。
* **型システム**: `int`, `double`, `bool` などの[[基本型]]があり、静的に管理される。
* **初期化**: `int x{10};` のような波括弧 `{}` を使う[[初期化]]が推奨される(縮小変換の防止)。
* **型推論と定数**: [[`auto`]] で型推論を行い、変更しない変数には [[`const`]] を付ける。
* **入出力**: [[`std::cout`]], [[`std::cin`]] を使い、`<<`, `>>` 演算子でデータを流す。
* **制御構文**: 基本は他言語と同じだが、`switch` のフォールスルー挙動などに注意する。
2 changes: 1 addition & 1 deletion public/docs/cpp/1-types-control/6-1-practice1.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ question:

## 練習問題1:うるう年判定機

西暦(整数)を変数 `year` に代入し、その年がうるう年かどうかを判定して結果を出力するプログラムを書いてください。
西暦(整数)を[[変数]] `year` に代入し、その年がうるう年かどうかを判定して結果を出力するプログラムを書いてください。

> **うるう年の条件**
>
Expand Down
2 changes: 1 addition & 1 deletion public/docs/cpp/1-types-control/6-2-practice2.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ question:
* 両方で割り切れるときは "FizzBuzz" と出力。
* それ以外は数値をそのまま出力。

出力はスペース区切りまたは改行区切りどちらでも構いません。変数の初期化には `{}` を、ループカウンタの型には `auto` を使用してみてください。
出力はスペース区切りまたは改行区切りどちらでも構いません。[[変数]]の[[初期化]]には `{}` を、ループカウンタの型には [[`auto`]] を使用してみてください。

```cpp:practice2_2.cpp
#include <iostream>
Expand Down
4 changes: 2 additions & 2 deletions public/docs/cpp/10-stl-containers/1-0-about.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ question:

STLは、主に3つの要素から構成されています。

1. **コンテナ (Containers)**: データを格納するためのデータ構造です。`vector`(可変長配列)や`map`(連想配列)など、様々な種類があります。
1. **コンテナ (Containers)**: データを格納するためのデータ構造です。[[`std::vector`]](可変長配列)や`std::map`(連想配列)など、様々な種類があります。
2. **アルゴリズム (Algorithms)**: ソート、検索、変換など、コンテナ上のデータに対して操作を行う関数群です。
3. **イテレータ (Iterators)**: コンテナの要素を指し示し、アルゴリズムがコンテナの種類に依存せずに各要素にアクセスするための統一的なインターフェースを提供します。ポインタを一般化したようなものです。

これら3つが連携することで、C++プログラマは効率的で再利用性の高いコードを素早く書くことができます。この章では「コンテナ」を、次の章では「アルゴリズム」と、それらをつなぐ「イテレータ」の応用を詳しく見ていきます。
これら3つが連携することで、C++プログラマは効率的で再利用性の高いコードを素早く書くことができます。この章では「コンテナ」を、[[./11]]では「アルゴリズム」と、それらをつなぐ「イテレータ」の応用を詳しく見ていきます。
4 changes: 2 additions & 2 deletions public/docs/cpp/10-stl-containers/2-0-vector.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ question:

## `std::vector`: 最もよく使う可変長配列

`std::vector`は、最も基本的で最もよく使われるコンテナです。他の言語でいうところの「リスト」や「動的配列」に相当し、要素を連続したメモリ領域に格納します。
[[`std::vector`]]は、最も基本的で最もよく使われるコンテナです。他の言語でいうところの「リスト」や「動的配列」に相当し、要素を連続したメモリ領域に格納します。

**主な特徴**:

* **動的なサイズ**: 必要に応じて自動的にサイズが拡張されます。
* **高速なランダムアクセス**: インデックス(添字)を使って `[i]` の形式で要素に高速にアクセスできます (`O(1)`)。
* **末尾への高速な追加・削除**: `push_back()` や `pop_back()` を使った末尾への操作は非常に高速です。

`std::vector`を使うには、`<vector>`ヘッダをインクルードする必要があります
`std::vector`を使うには、`<vector>`ヘッダを[[インクルード]]する必要があります

```cpp:vector_example.cpp
#include <iostream>
Expand Down
2 changes: 1 addition & 1 deletion public/docs/cpp/10-stl-containers/3-0-map.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ question:
* **キーによる高速な検索**: キーに基づいて要素が自動的にソートされて格納されるため、検索、挿入、削除が高速です (`O(log n)`)。
* **一意なキー**: `std::map`内のキーは重複しません。同じキーで値を挿入しようとすると、既存の値が上書きされます。

`std::map`を使うには、`<map>`ヘッダをインクルードする必要があります
`std::map`を使うには、`<map>`ヘッダを[[インクルード]]する必要があります

```cpp:map_example.cpp
#include <iostream>
Expand Down
Loading
Loading