Skip to content

Commit

Permalink
見落としの修正
Browse files Browse the repository at this point in the history
  • Loading branch information
hironori-hoshino committed Aug 29, 2019
1 parent 3a83118 commit 3d9f37a
Show file tree
Hide file tree
Showing 23 changed files with 36 additions and 37 deletions.
4 changes: 2 additions & 2 deletions 007-standard-input.md
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ $ ./program
hello
~~~

リダイレクトを使えば、この出力先をファイルにできる。リダイレクトを使うには`"プログラム \> ファイル名"`とする
リダイレクトを使えば、この出力先をファイルにできる。リダイレクトを使うには`"プログラム \> ファイル名"`とする


~~~
Expand All @@ -305,7 +305,7 @@ int main()
}
~~~

このプログラム名を`bmi`として、通常通り実行すると以下のようになる
このプログラム名を`bmi`として、通常どおり実行すると以下のようになる

~~~
$ ./bmi
Expand Down
4 changes: 2 additions & 2 deletions 008-loop.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ loop :

1. 関数`hello`が呼ばれる
2. `goto`文でラベル`loop`まで飛ぶ
3. 1に戻る
3. 1.に戻る

という処理を行う。

Expand Down Expand Up @@ -641,7 +641,7 @@ int main()
}
~~~

重要なのは以下の4行だ
重要なのは以下の5行だ

~~~cpp
while( true )
Expand Down
2 changes: 1 addition & 1 deletion 013-names.md
Original file line number Diff line number Diff line change
Expand Up @@ -681,7 +681,7 @@ int main()
~~~cpp
namespace ns
{ // 名前空間スコープの始まり
} // 関数スコープの終わり
} // 名前空間スコープの終わり

void f()
{ // 関数スコープの始まり
Expand Down
2 changes: 1 addition & 1 deletion 014-iterator.md
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ int main()
}
~~~

`関数output_all`のコードは何も変えていないのに、さまざまなイテレーターに対応できる。イテレーターというお作法に乗っ取ることで、さまざまな処理が可能になるのだ。
`関数output_all`のコードは何も変えていないのに、さまざまなイテレーターに対応できる。イテレーターというお作法にのっとることで、さまざまな処理が可能になるのだ。

これは出力にも言えることだ。`関数output_all``std::cout`に出力していた。これをイテレーターに対する書き込みに変えてみよう。

Expand Down
2 changes: 1 addition & 1 deletion 015-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ int main()
// constの付いている型のオブジェクト
const int x = 0 ;

// エラー、constがない
// エラー、constがない
int & ref = x ;

// OK、constが付いている
Expand Down
2 changes: 1 addition & 1 deletion 018-class.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ int main()
~~~cpp
struct S
{
// これは変数ではない
// これは変数ではない
int data ;
} ;
~~~
Expand Down
2 changes: 1 addition & 1 deletion 021-three-virtues-of-a-programmer.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@

傲慢

: ゼウスも罰したもう過剰なまでの奢り。他人がそしりを入れられぬほどのプログラムを書く推進剤。これがプログラマーの第三の美徳である。
: ゼウスも罰したもう過剰なまでの驕り。他人がそしりを入れられぬほどのプログラムを書く推進剤。これがプログラマーの第三の美徳である。

これから学ぶ`array`を実装するためのC++の機能を学ぶときに、このプログラマーの三大美徳のことを頭に入れておこう。
2 changes: 1 addition & 1 deletion 023-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -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, ...
~~~
Expand Down
2 changes: 1 addition & 1 deletion 025-array-iterator.md
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ int main()
std::cout << ++i ; // 1
// 後置
std::cout << i++ ; // 1
std::cout << i // 2
std::cout << i ; // 2
}
~~~

Expand Down
2 changes: 1 addition & 1 deletion 026-exception.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ reference array::operator [] ( std::size_t i )
if ( i >= size() )
{
// エラー検出
// しかし何をreturnすればいいのだろう
// しかし何をreturnすればいいのだろう
}

return storage[i] ;
Expand Down
1 change: 0 additions & 1 deletion 030-pointer-details.md
Original file line number Diff line number Diff line change
Expand Up @@ -622,7 +622,6 @@ int main()
確かめてみよう。
~~~cpp
struct Object
{
int x = 123 ;
Expand Down
4 changes: 2 additions & 2 deletions 031-iterator-operations.md
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ void f( OutputIterator i, typename OutputIterator::value_type v )
template < typename OutputIterator >
void f( OutputIterator i )
{
// 意味がない
// 意味がない
auto value = *i ;
}
~~~
Expand Down Expand Up @@ -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番目を指す
Expand Down
2 changes: 1 addition & 1 deletion 033-vector-implementation.md
Original file line number Diff line number Diff line change
Expand Up @@ -561,7 +561,7 @@ class vector
{
public :
using allocator_type = Allocator ;
}
} ;
~~~

`size_type`は要素数を表現する型だ。
Expand Down
14 changes: 7 additions & 7 deletions 034-vector-memory-allocation.md
Original file line number Diff line number Diff line change
Expand Up @@ -397,9 +397,9 @@ int main()

まとめよう。

1. すでに指定された要素数以上に予約されているなら何もしない
2. まだ動的メモリー確保が行われていなければ動的メモリー確保をする
3. 有効な要素がある場合は新しいストレージにコピーする
1. すでに指定された要素数以上に予約されているなら何もしない
2. まだ動的メモリー確保が行われていなければ動的メモリー確保をする
3. 有効な要素がある場合は新しいストレージにコピーする

古いストレージから新しいストレージに要素をコピーするとき、古いストレージと新しいストレージが一時的に同時に存在しなければならない。

Expand Down Expand Up @@ -486,7 +486,7 @@ void reserve( size_type sz )
{
destroy( &*riter ) ;
}
// scope_exitによって自動的にストレージが破棄される
// scope_exitによって自動的にストレージが破棄される
}
~~~
Expand Down Expand Up @@ -584,9 +584,9 @@ int main()

まとめると`resize`は以下のように動作する。

1. 現在の要素数より少なくリサイズする場合、末尾から要素を破棄する
2. 現在の要素数より大きくリサイズする場合、末尾に要素を追加する
3. 現在の要素数と等しくリサイズする場合、何もしない
1. 現在の要素数より少なくリサイズする場合、末尾から要素を破棄する
2. 現在の要素数より大きくリサイズする場合、末尾に要素を追加する
3. 現在の要素数と等しくリサイズする場合、何もしない

実装しよう。

Expand Down
2 changes: 1 addition & 1 deletion 035-copy.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`の場合も同様だ。

以下のような例も見てみよう。

Expand Down
2 changes: 1 addition & 1 deletion 036-move.md
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ public :

// コピーコンストラクター
dynamic_array( const dynamic_array & r ) ;
}
} ;
~~~
このクラスのコピーコンストラクターの定義は以下のように書ける。
Expand Down
4 changes: 2 additions & 2 deletions 037-rvalue-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ int main()
{
X x{} ;
int && r = static_cast<X &&>(x).data_member ;
} ;
}
~~~
+ 式`.*`で最初のオペランドが`xvalue`で次のオペランドがデータメンバーへのポインターの場合
Expand Down Expand Up @@ -281,7 +281,7 @@ int main()
// lvalueなオブジェクト
int lvalue { } ;

// OK、lvalueリファレンスはlvalueで初期化できる
// OK、lvalueリファレンスはlvalueで初期化できる
int & l_ref = lvalue ;

// OK、rvalueリファレンスはrvalueで初期化できる
Expand Down
2 changes: 1 addition & 1 deletion 041-move-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public :
{
*ptr = -*ptr ;
}
}
} ;
~~~

幸い、クラス`Integer`はムーブコンストラクターを実装しているので、
Expand Down
2 changes: 1 addition & 1 deletion 042-string-intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -675,7 +675,7 @@ int main()
// 少なくともchar [5]を格納できるだけのストレージを動的確保する
std::string hello("hello") ;
// helloが破棄される
// デストラクターはストレージを解放する
// デストラクターはストレージを解放する
}
~~~

Expand Down
8 changes: 4 additions & 4 deletions 043-random.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 >
Expand Down Expand Up @@ -442,7 +442,7 @@ int dice( Engine & e )
1. 3bitの生の乱数rを得る
2. `r`が$0 \leq r \leq 5$なら``r`+1'が分布された乱数
3. それ以外の場合、1に戻る
3. それ以外の場合、1.に戻る
これを実装すると以下のようになる。
Expand Down Expand Up @@ -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>``IntType`型の乱数$i$, $i \geq 0$を以下の離散確率関数に従って分布する。

Expand Down Expand Up @@ -1020,7 +1020,7 @@ unsigned int try_lootboxes( Engine & e )
負の二項分布(negative binomial distribution)は幾何分布に似ている。幾何分布がベルヌーイ試行が1回成功するまでに行ったベルヌーイ試行の回数を乱数として分布するのに対し、負の二項分布はベルヌーイ試行が$k$回成功するまでに行ったベルヌーイ試行の回数を乱数として分布する。
負の二項分布を具体的な例で考えよう
負の二項分布を具体的な例で考えよう
+ コイントスを、10回、表が出るまで行った回数
+ 6面ダイスを、10回、1の目が出るまで振った回数
Expand Down
4 changes: 2 additions & 2 deletions 046-random-part4.md
Original file line number Diff line number Diff line change
Expand Up @@ -361,15 +361,15 @@ int main()

#### 簡単な説明

区分線形分布(piecewise linear distribution)は区分定数分布と同じく、区間と確率(又の名を密度、ウエイト)を指定する。
区分線形分布(piecewise linear distribution)は区分定数分布と同じく、区間と確率(またの名を密度、ウエイト)を指定する。

区間の指定は区分定数分布と同じだ。内部境界の集合で指定する。例えば`{1.0, 2.0, 3.0}`は2つの区間`[1.0, 2.0)``[2.0, 3.0)`を指定する。

区分線形分布における確率は、区間に対してではなく、内部境界に対して指定する。指定した全区間における値の出現確率は、内部境界から内部境界に向かって指定した確率の差の方向に線形に増加、もしくは減少する。

例えば区分`{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}$に減少する。

Expand Down
2 changes: 1 addition & 1 deletion 300-multiple-source-files.md
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,7 @@ inline void print_int( int x )
#include "library.h"
~~~

`inline`はODRを例外的に回避できるとは言え、強い制約がある。
`inline`はODRを例外的に回避できるとはいえ、強い制約がある。

1. 異なる翻訳単位に限る

Expand Down
2 changes: 1 addition & 1 deletion 400-gdb.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 3d9f37a

Please sign in to comment.