読者です 読者をやめる 読者になる 読者になる

c++メモ

  • usingは消せないのでヘッダには基本的に書かない.(ヘッダをインクルードしたファイルでもusingが有効になるから)
  • メンバ関数(の末尾)にconstを付けると,そのメンバ関数はメンバ変数を変更しないことをコンパイラに伝える.
  • ファイル末尾まで一気に読み込んで,ぴったりサイズのchar配列に格納

流れは,一旦ファイル末尾に行って,その位置を調べて,戻って読込.
seekg(オフセット,開始位置)でストリームの読込開始位置を移動する.
開始位置として,beg, end, curが使える.
tellgで現在の位置を返す

void readFile(string fname) {
  ifstream ifs( fname, ifstream::binary);
  ifs.seekg(0, ifstream::end);
  int fsize = static_cast<int> (ifs.tellg());
  char* fi = new char[fsize];
  ifs.seekg(0, ifsstream::beg);
  ifs.read(fi, fsize);
}
  • 乱数生成

C++11から乱数生成器が標準ライブラリに入った.(但し確率計算は結局Boostを使うことになる)
流れは,ハードウェア乱数生成器で真の乱数を作る(random_device)
そいつを種にメルセンヌツイスター乱数生成器をつくる(mt19937)
所望の確率分布の乱数生成器を作る(ここでmtを渡す)

std::random_device _rnd;
std::mt19937 mt(_rnd());
std::uniform_real_distribution<> rnd(0, 2*M_PI);
rnd(mt);