0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

本から学ぶプログラミング May 9

Last updated at Posted at 2020-05-09

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章 大いなる章

  • 欲望に基づいて生存の快楽に囚われている人々は解脱しがたい。他人が解脱させてくれるのではないからである
  • 自分を他人と等しいと示すことなく、他人よりも劣っているとか、或は、優れているとか考えてはならない。
  • 学識に関しても特に依拠することをしない
  • この世についても、来世についても願うことがない
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?