C++によるプログラミングの原則と実践
第19章 vector,テンプレート,例外
- vectorの実装では、[]の範囲チェックは義務付けられてないが、禁じられていない
- 原則として、リソースを確保する場合は、システムにおいてそのリソースを管理する部分に、直接または、間接的に、それを戻さなければならない。
- リソースの例としては、 メモリー ロック ファイルハンドル スレッドハンドル ソケット ウィンドウ がある
- new演算子を使って確保され、delete演算子を使って、フリーストア に戻されるフリーストア メモリー
- vectorのようにリソースの解放に責任を持つオブジェクトは、そのリソースの使用者ownerまたは、handleと呼ばれる
- スコープ内で必要となる記憶領域の利生がまちまちである場合は、new演算子や、delete演算子を明示的に使用するのではなく、vectorを使用する
第19章 drill
- 1 template struct S{ T val; }; を定義する
- 2 コンストラクターを追加し、Tを使って初期化できるようにする
- 3 S S S S S> 型の変数を定義し、それらを選択した値で初期化する
- 4 それらの値を読み取り出力する
- 5 valへの参照を返す関数テンプレート get()を追加する
- 6 get()の定義をクラスの外に出す
- 7 valをprivateにする
- 8 get()を使ってドリル4を再び実行する
- 9 関数テンプレート set()を追加し、valを変更できるようにする。
- 10 set()を S::operator=(const T&)と置き換える。 ヒント 19.2.5 よりもずっと簡単
- 11 get()のconstバージョンと、非constバージョンを提供する
- 12 cinからvに読み込む template read_val(T& v)関数を定義する
- 13 read_val()を使ってドリル3の変数にそれぞれ値を読み込む ただし、S>型の変数を除く
- 14 おまけ、 vectorの >>演算子と、 <<演算子を定義する どちらの演算でも { val, val, val} 形式を使用する。 これにより、 read_val()でも S>型の変数を扱えるようになる
第19章 練習問題
-
練習問題ごとに、定義済みのクラスのオブジェクトを2つ作成し、(出力を使って)テストし、設計と実装が実際に想定どおりに動作する事を検証する。例外が関与する場所では、エラーがどこで発生するのかについてよく考える必要がある。
-
1 テンプレート関数f()を記述する。この関数はvector型の要素を別のvector型の要素に追加する。例えば、f(v1,v2)は、v1の要素ごとにv1[i]+=v2[i]を実行する
-
2 引数としてvector vtとvectorvuを受け取るテンプレート関数を記述する。この関数は全てのvt[i]*vu[i]の合計を返す
-
3 テンプレートクラス Pairを記述する。このクラスは任意の型の値のペアを格納できる。このクラスを使って電卓プログラム(7.8)で使用したような単純なシンボルテーブルを実装する。
-
4 Linkクラス(17.9.3)を書き換え、テンプレート引数として値の型を使用するテンプレートに変更する。そして、Linkを使って、第17章の練習問題13を再び実行する。
-
5 Intクラスを定義する。このクラスには、int型のクラスメンバーが1つだけ含まれている。コンストラクター、代入、演算子+、-、*、/を定義する。このクラスをテストし、I/Oを実行しやすくなるように、<<演算子と>>演算子を定義するなど、必要に応じて、設計を改善する
追記
- テンプレートを使用することにより、vecotorなどのコンテナーを要素型の定義から切り離して定義できる
- 例外を使用することにより、エラーを検出して通知するコードを、エラーを処理するコードから切り離して記述できる。
- push_back() resize() reserve()を使用することで、vectorの定義をそのサイズの使用から切り離すことができる。
データサイエンティスト養成読本 機械学習入門編
第4章 深層学習最前線
- 損失関数とは、多層パーセプトロンが出力した予測がどれくらい外れているかを返す関数
ブッダの言葉
https://amzn.to/2A4nVdf
人工知能を勉強する上で、人間とはを考える
第3章 大いなる章
- 欲望に基づいて生存の快楽に囚われている人々は解脱しがたい。他人が解脱させてくれるのではないからである
- 自分を他人と等しいと示すことなく、他人よりも劣っているとか、或は、優れているとか考えてはならない。
- 学識に関しても特に依拠することをしない
- この世についても、来世についても願うことがない