From 3d9f37ac290cdc22ddc9cba357fbc6455ea29722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E9=87=8E=E3=80=80=E6=B5=A9=E7=AB=A0=E3=80=80?= Date: Thu, 29 Aug 2019 16:34:11 +0900 Subject: [PATCH] =?UTF-8?q?=E8=A6=8B=E8=90=BD=E3=81=A8=E3=81=97=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 007-standard-input.md | 4 ++-- 008-loop.md | 4 ++-- 013-names.md | 2 +- 014-iterator.md | 2 +- 015-reference.md | 2 +- 018-class.md | 2 +- 021-three-virtues-of-a-programmer.md | 2 +- 023-template.md | 2 +- 025-array-iterator.md | 2 +- 026-exception.md | 2 +- 030-pointer-details.md | 1 - 031-iterator-operations.md | 4 ++-- 033-vector-implementation.md | 2 +- 034-vector-memory-allocation.md | 14 +++++++------- 035-copy.md | 2 +- 036-move.md | 2 +- 037-rvalue-reference.md | 4 ++-- 041-move-support.md | 2 +- 042-string-intro.md | 2 +- 043-random.md | 8 ++++---- 046-random-part4.md | 4 ++-- 300-multiple-source-files.md | 2 +- 400-gdb.md | 2 +- 23 files changed, 36 insertions(+), 37 deletions(-) diff --git a/007-standard-input.md b/007-standard-input.md index 4412171..89044f6 100644 --- a/007-standard-input.md +++ b/007-standard-input.md @@ -278,7 +278,7 @@ $ ./program hello ~~~ -リダイレクトを使えば、この出力先をファイルにできる。リダイレクトを使うには`"プログラム \> ファイル名"`とする +リダイレクトを使えば、この出力先をファイルにできる。リダイレクトを使うには`"プログラム \> ファイル名"`とする。 ~~~ @@ -305,7 +305,7 @@ int main() } ~~~ -このプログラム名を`bmi`として、通常通り実行すると以下のようになる。 +このプログラム名を`bmi`として、通常どおり実行すると以下のようになる。 ~~~ $ ./bmi diff --git a/008-loop.md b/008-loop.md index e56412e..b9efc14 100644 --- a/008-loop.md +++ b/008-loop.md @@ -147,7 +147,7 @@ loop : 1. 関数`hello`が呼ばれる 2. `goto`文でラベル`loop`まで飛ぶ -3. 1に戻る +3. 1.に戻る という処理を行う。 @@ -641,7 +641,7 @@ int main() } ~~~ -重要なのは以下の4行だ。 +重要なのは以下の5行だ。 ~~~cpp while( true ) diff --git a/013-names.md b/013-names.md index a692770..708447d 100644 --- a/013-names.md +++ b/013-names.md @@ -681,7 +681,7 @@ int main() ~~~cpp namespace ns { // 名前空間スコープの始まり -} // 関数スコープの終わり +} // 名前空間スコープの終わり void f() { // 関数スコープの始まり diff --git a/014-iterator.md b/014-iterator.md index 37593c2..7701d18 100644 --- a/014-iterator.md +++ b/014-iterator.md @@ -295,7 +295,7 @@ int main() } ~~~ -`関数output_all`のコードは何も変えていないのに、さまざまなイテレーターに対応できる。イテレーターというお作法に乗っ取ることで、さまざまな処理が可能になるのだ。 +`関数output_all`のコードは何も変えていないのに、さまざまなイテレーターに対応できる。イテレーターというお作法にのっとることで、さまざまな処理が可能になるのだ。 これは出力にも言えることだ。`関数output_all`は`std::cout`に出力していた。これをイテレーターに対する書き込みに変えてみよう。 diff --git a/015-reference.md b/015-reference.md index e5acccf..c532328 100644 --- a/015-reference.md +++ b/015-reference.md @@ -237,7 +237,7 @@ int main() // constの付いている型のオブジェクト const int x = 0 ; - // エラー、constがない。 + // エラー、constがない int & ref = x ; // OK、constが付いている diff --git a/018-class.md b/018-class.md index 8fab07e..1ed4da2 100644 --- a/018-class.md +++ b/018-class.md @@ -159,7 +159,7 @@ int main() ~~~cpp struct S { - // これは変数ではない。 + // これは変数ではない int data ; } ; ~~~ diff --git a/021-three-virtues-of-a-programmer.md b/021-three-virtues-of-a-programmer.md index 51ac5c6..9030054 100644 --- a/021-three-virtues-of-a-programmer.md +++ b/021-three-virtues-of-a-programmer.md @@ -16,6 +16,6 @@ 傲慢 -: ゼウスも罰したもう過剰なまでの奢り。他人がそしりを入れられぬほどのプログラムを書く推進剤。これがプログラマーの第三の美徳である。 +: ゼウスも罰したもう過剰なまでの驕り。他人がそしりを入れられぬほどのプログラムを書く推進剤。これがプログラマーの第三の美徳である。 これから学ぶ`array`を実装するためのC++の機能を学ぶときに、このプログラマーの三大美徳のことを頭に入れておこう。 diff --git a/023-template.md b/023-template.md index 92bc13d..f655bea 100644 --- a/023-template.md +++ b/023-template.md @@ -39,7 +39,7 @@ struct array_double_1 double storage[1] ; double & operator []( std::size_t i ) { return storage[i] ; } -} +} ; // array_double_2, array_double_3, ... ~~~ diff --git a/025-array-iterator.md b/025-array-iterator.md index 104e03a..6f67b77 100644 --- a/025-array-iterator.md +++ b/025-array-iterator.md @@ -469,7 +469,7 @@ int main() std::cout << ++i ; // 1 // 後置 std::cout << i++ ; // 1 - std::cout << i // 2 + std::cout << i ; // 2 } ~~~ diff --git a/026-exception.md b/026-exception.md index 0878a43..74ea14e 100644 --- a/026-exception.md +++ b/026-exception.md @@ -28,7 +28,7 @@ reference array::operator [] ( std::size_t i ) if ( i >= size() ) { // エラー検出 - // しかし何をreturnすればいいのだろう。 + // しかし何をreturnすればいいのだろう } return storage[i] ; diff --git a/030-pointer-details.md b/030-pointer-details.md index f49411b..e078044 100644 --- a/030-pointer-details.md +++ b/030-pointer-details.md @@ -622,7 +622,6 @@ int main() 確かめてみよう。 ~~~cpp - struct Object { int x = 123 ; diff --git a/031-iterator-operations.md b/031-iterator-operations.md index 552e0a7..22a1f2a 100644 --- a/031-iterator-operations.md +++ b/031-iterator-operations.md @@ -364,7 +364,7 @@ void f( OutputIterator i, typename OutputIterator::value_type v ) template < typename OutputIterator > void f( OutputIterator i ) { - // 意味がない。 + // 意味がない auto value = *i ; } ~~~ @@ -1398,7 +1398,7 @@ std::advance(i, 0) ; `n`が正数の場合は前方(`i+1`の方向)に、`n`が負数の場合は後方(`i-1`の方向)に、それぞれ`n`回移動させる。 -`advance(i,n)`はi自体が書き換わる。 +`advance(i,n)`は`i`自体が書き換わる。 ~~~cpp i ; // n番目を指す diff --git a/033-vector-implementation.md b/033-vector-implementation.md index 8a30b28..ca81b58 100644 --- a/033-vector-implementation.md +++ b/033-vector-implementation.md @@ -561,7 +561,7 @@ class vector { public : using allocator_type = Allocator ; -} +} ; ~~~ `size_type`は要素数を表現する型だ。 diff --git a/034-vector-memory-allocation.md b/034-vector-memory-allocation.md index 162372b..ea4ae85 100644 --- a/034-vector-memory-allocation.md +++ b/034-vector-memory-allocation.md @@ -397,9 +397,9 @@ int main() まとめよう。 -1. すでに指定された要素数以上に予約されているなら何もしない。 -2. まだ動的メモリー確保が行われていなければ動的メモリー確保をする。 -3. 有効な要素がある場合は新しいストレージにコピーする。 +1. すでに指定された要素数以上に予約されているなら何もしない +2. まだ動的メモリー確保が行われていなければ動的メモリー確保をする +3. 有効な要素がある場合は新しいストレージにコピーする 古いストレージから新しいストレージに要素をコピーするとき、古いストレージと新しいストレージが一時的に同時に存在しなければならない。 @@ -486,7 +486,7 @@ void reserve( size_type sz ) { destroy( &*riter ) ; } - // scope_exitによって自動的にストレージが破棄される。 + // scope_exitによって自動的にストレージが破棄される } ~~~ @@ -584,9 +584,9 @@ int main() まとめると`resize`は以下のように動作する。 -1. 現在の要素数より少なくリサイズする場合、末尾から要素を破棄する。 -2. 現在の要素数より大きくリサイズする場合、末尾に要素を追加する。 -3. 現在の要素数と等しくリサイズする場合、何もしない。 +1. 現在の要素数より少なくリサイズする場合、末尾から要素を破棄する +2. 現在の要素数より大きくリサイズする場合、末尾に要素を追加する +3. 現在の要素数と等しくリサイズする場合、何もしない 実装しよう。 diff --git a/035-copy.md b/035-copy.md index c9a30c0..f71544e 100644 --- a/035-copy.md +++ b/035-copy.md @@ -47,7 +47,7 @@ int main() } ~~~ -これはまず`z = 0`が評価される。変数`z`の値は`0`になり、式を評価した結果の値は`z`へのlvalueリファレンスだ。なので、`y = z = 0`というのは、`y = (z=0)`となる。`z=0`については`z`であるので、`y = z`となる。ここでの`z`は`0`を代入されたあとの`z`なので、値は`0`だ。その結果変数`y`の値は`0`になる。変数`x`の場合も同様だ。 +これはまず`z = 0`が評価される。変数`z`の値は`0`になり、式を評価した結果の値は`z`への`lvalue`リファレンスだ。なので、`y = z = 0`というのは、`y = (z=0)`となる。`z=0`については`z`であるので、`y = z`となる。ここでの`z`は`0`を代入されたあとの`z`なので、値は`0`だ。その結果変数`y`の値は`0`になる。変数`x`の場合も同様だ。 以下のような例も見てみよう。 diff --git a/036-move.md b/036-move.md index e64ad44..ed27519 100644 --- a/036-move.md +++ b/036-move.md @@ -204,7 +204,7 @@ public : // コピーコンストラクター dynamic_array( const dynamic_array & r ) ; -} +} ; ~~~ このクラスのコピーコンストラクターの定義は以下のように書ける。 diff --git a/037-rvalue-reference.md b/037-rvalue-reference.md index 9eed3d0..1d9edbd 100644 --- a/037-rvalue-reference.md +++ b/037-rvalue-reference.md @@ -250,7 +250,7 @@ int main() { X x{} ; int && r = static_cast(x).data_member ; -} ; +} ~~~ + 式`.*`で最初のオペランドが`xvalue`で次のオペランドがデータメンバーへのポインターの場合 @@ -281,7 +281,7 @@ int main() // lvalueなオブジェクト int lvalue { } ; - // OK、lvalueリファレンスはlvalueで初期化できる。 + // OK、lvalueリファレンスはlvalueで初期化できる int & l_ref = lvalue ; // OK、rvalueリファレンスはrvalueで初期化できる diff --git a/041-move-support.md b/041-move-support.md index 6357385..7d73f55 100644 --- a/041-move-support.md +++ b/041-move-support.md @@ -166,7 +166,7 @@ public : { *ptr = -*ptr ; } -} +} ; ~~~ 幸い、クラス`Integer`はムーブコンストラクターを実装しているので、 diff --git a/042-string-intro.md b/042-string-intro.md index 575437a..ea62fab 100644 --- a/042-string-intro.md +++ b/042-string-intro.md @@ -675,7 +675,7 @@ int main() // 少なくともchar [5]を格納できるだけのストレージを動的確保する std::string hello("hello") ; // helloが破棄される - // デストラクターはストレージを解放する。 + // デストラクターはストレージを解放する } ~~~ diff --git a/043-random.md b/043-random.md index e2037e7..e97e3f5 100644 --- a/043-random.md +++ b/043-random.md @@ -46,7 +46,7 @@ $$X_3 = 3 \times X_2 + 5 \bmod 2^{32}-1 = 65$$ `乱数エンジン`は生の乱数を生成するライブラリだ。クラスで実装されている。 -乱数エンジンはメンバー関数`min()`で最小値を、メンバー関数`max()`で最大値を、`operator()`で最小値から最大値の間の乱数を返す +乱数エンジンはメンバー関数`min()`で最小値を、メンバー関数`max()`で最大値を、`operator()`で最小値から最大値の間の乱数を返す。 ~~~cpp template < typename Engine > @@ -442,7 +442,7 @@ int dice( Engine & e ) 1. 3bitの生の乱数rを得る 2. `r`が$0 \leq r \leq 5$なら``r`+1'が分布された乱数 -3. それ以外の場合、1に戻る +3. それ以外の場合、1.に戻る これを実装すると以下のようになる。 @@ -925,7 +925,7 @@ auto lootbox( Engine & e ) + 6面ダイスを1の目が出るまで振った回数 + 確率1%で当たるくじ引きをアタリが出るまで引いた回数 -コイントスの例で考えよう。コイントス1回をベルヌーイ試行とし、成功を表とする。表が出るまでコイントスをしてみよう。コイントスを何回する必要があるだろうか。運がよければ1回で表がでるので1回だ。運が悪ければ、5回コイントスをしても全部裏なこともあるだろう。100回コイントスをして表が一度も出ないことは、確率的にはあり得る。ただしその確率は$\frac{1}{2^{100}}$なので、およそあり得ない確率ではある。 +コイントスの例で考えよう。コイントス1回をベルヌーイ試行とし、成功を表とする。表が出るまでコイントスをしてみよう。コイントスを何回する必要があるだろうか。運がよければ1回で表が出るので1回だ。運が悪ければ、5回コイントスをしても全部裏なこともあるだろう。100回コイントスをして表が一度も出ないことは、確率的にはあり得る。ただしその確率は$\frac{1}{2^{100}}$なので、およそあり得ない確率ではある。 `std::geometric_distribution`は`IntType`型の乱数$i$, $i \geq 0$を以下の離散確率関数に従って分布する。 @@ -1020,7 +1020,7 @@ unsigned int try_lootboxes( Engine & e ) 負の二項分布(negative binomial distribution)は幾何分布に似ている。幾何分布がベルヌーイ試行が1回成功するまでに行ったベルヌーイ試行の回数を乱数として分布するのに対し、負の二項分布はベルヌーイ試行が$k$回成功するまでに行ったベルヌーイ試行の回数を乱数として分布する。 -負の二項分布を具体的な例で考えよう +負の二項分布を具体的な例で考えよう。 + コイントスを、10回、表が出るまで行った回数 + 6面ダイスを、10回、1の目が出るまで振った回数 diff --git a/046-random-part4.md b/046-random-part4.md index 2ae198c..24b20c5 100644 --- a/046-random-part4.md +++ b/046-random-part4.md @@ -361,7 +361,7 @@ int main() #### 簡単な説明 -区分線形分布(piecewise linear distribution)は区分定数分布と同じく、区間と確率(又の名を密度、ウエイト)を指定する。 +区分線形分布(piecewise linear distribution)は区分定数分布と同じく、区間と確率(またの名を密度、ウエイト)を指定する。 区間の指定は区分定数分布と同じだ。内部境界の集合で指定する。例えば`{1.0, 2.0, 3.0}`は2つの区間`[1.0, 2.0)`と`[2.0, 3.0)`を指定する。 @@ -369,7 +369,7 @@ int main() 例えば区分`{0.0, 1.0}`と確率`{1.0, 2.0}`を指定した場合、これは1つの区間`[0.0, 1.0)`について、内部境界`0.0`の確率は$\frac{1}{3}$、内部境界`1.0`の確率は`\frac{2}{3}`とし、$0.0 \leq x < 1.0$の範囲の乱数`x`を生成する。内部境界区間の範囲に注意。`1.0`未満なので、`1.0`は出ない。 -そして、区間の間の値は、区間を区切る2つの内部境界の確率の差によって、線形に増加、もしくは減少する。例えば値`0.25`が出る確率は$\frac{1.25}{3}$、`0.5`が出る確率は$\frac{1.5}{3}$、値`1.75`がでる確率は$\frac{1.75}{3}$だ。 +そして、区間の間の値は、区間を区切る2つの内部境界の確率の差によって、線形に増加、もしくは減少する。例えば値`0.25`が出る確率は$\frac{1.25}{3}$、`0.5`が出る確率は$\frac{1.5}{3}$、値`1.75`が出る確率は$\frac{1.75}{3}$だ。 区分`{0.0, 1.0, 2.0}`と確率`{1.0, 2.0, 1.0}`の場合、2つの区間`[0.0, 1.0)`と`[1.0, 2.0)`の範囲について、`0.0`から`1.0`に向かう区間についての確率は$\frac{1}{4}$から$\frac{1}{2}$に増加し、`1.0`から`2.0`に向かう区間についての確率は$\frac{1}{2}$から$\frac{1}{4}$に減少する。 diff --git a/300-multiple-source-files.md b/300-multiple-source-files.md index ac46feb..f77990f 100644 --- a/300-multiple-source-files.md +++ b/300-multiple-source-files.md @@ -434,7 +434,7 @@ inline void print_int( int x ) #include "library.h" ~~~ -`inline`はODRを例外的に回避できるとは言え、強い制約がある。 +`inline`はODRを例外的に回避できるとはいえ、強い制約がある。 1. 異なる翻訳単位に限る diff --git a/400-gdb.md b/400-gdb.md index 5a3e322..4f801d5 100644 --- a/400-gdb.md +++ b/400-gdb.md @@ -195,7 +195,7 @@ Breakpoint 3, main () at main.cpp:5 $2 = 10 ~~~ -値は`10`だ。GDBは`print`の結果の履歴を記録している。`$1`や`$2`というのはその記録を参照するための名前だ。その値は`print`コマンドで確認できる +値は`10`だ。GDBは`print`の結果の履歴を記録している。`$1`や`$2`というのはその記録を参照するための名前だ。その値は`print`コマンドで確認できる。 ~~~ (gdb) print $1