C++

allocatorクラス

C++

ヘッダにある、allocatorクラス。 これの動きは メンバ関数 construct() はコンストラクタ呼び出し メンバ関数 destoy() はデストラクタ呼び出し 非メンバ関数の uninitialized_copy() はコピーコンストラクタを呼び出す 非メンバ関数の uninitialized_fill(…

Accelerated C++第11章

std::vector に相当する Vec を定義する話。 explicit 引数が一つだけのコンストラクタのみに適用できるもの。明示的にコンストラクタ呼び出しが必要なことを指定するもので、非明示的な変換によるコンストラクタ呼び出しを防止する。詳しくは12章へ。 演…

Accelerated C++第10章

ポインタはランダムアクセス反復子の一種 n 要素の配列 a に対し a + i が有効なのは 0≦i≦n のとき a + i が要素を指すのは 0≦i<n のとき a + n は最後の要素の1つ後(container.end() と同じ) 文字列リテラルとは文字数より1つ大きいサイズの const char…

Accelerated C++第9章

一通り15章まで読んでしまったので、落穂拾い的なメモ constキーワードはメンバ関数の宣言と定義の両方に必要 オブジェクトの状態を変える関数はメンバ関数とする 一般に内部を公開するつもりの小さなデータ構造ならstructを使う クラスオブジェクトの生成…

iteratorを引数にするジェネリック関数 iterator_traits

C++

例えば2つのイテレータを受け取って平均を返す関数を書こうとすると、イテレータが指し示す型の情報がないと作れませんね。 こんなときは iterator_traits というものを使って書くようです。 例えば平均値を求める関数を書いてみると、次のようになります。…

前置・後置のインクリメント、デクリメント/oprator++() operator--()

C++

Accelerated C++の中で変数をインクリメントする場合で、その値を使用しない場合はすべて前置のインクリメント演算子が使用されています。 for (int i = 0; i < 10; ++i) 僕自身はC言語を覚えてから標準では後置のものを使用していますが、どちらが多いので…

std::endl

C++

これまで、何となく気持ち悪いと思いつつ std::endl を使ってきました。 この気持ち悪さというのは「単に改行をしたい」という場合と「バッファフラッシュをしたい」場合は異なるということ。 std::endl の実装では、 // Microsoft Visual Studio 2005 い含…

Accelerated C++ 第8章

反復子 全部で5種類 入力反復子 出力反復子 前方向反復子 双方向反復子 ランダムアクセス反復子 入力反復子 vector<int> v; copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(v)); 出力反復子 copy(v.begin(), ve.end(), ostream_iterator<int>(cout, </int></int></int></int>…

C++0xとかTR1とかATL/CLRとかいろいろあるようだ

C++

Visual Studio 2008からTR1を取り込んでいるとか世の中的には動いている模様。 これまでBorland C++を使用してたけど、何件かトラブルが続いてやや信頼感が低下。 C++ BuilderのGUIアプリ作成の簡便さは捨てがたいけど、やっぱり.NETからC#への流れなのかな…

STL関連の情報メモ

C++

STL超入門 http://www.jah.ne.jp/~naoyuki/Writings/STL.html Standard Template Library プログラミング on the Web http://www005.upp.so-net.ne.jp/episteme/ Rogue Wave Software 標準 C++ ライブラリ・ユーザーズガイド http://docs.sun.com/source/820…

Accelerated C++の7章まで

C++

ここまでで一通りSTLを学んだことになる。 ファイル入出力が(エラー・ログ含む)標準入出力だけなので、用途は限定されるものの、日常のテキストベースのプログラムは書ける。 ファイル入出力も ifstream / ofstream オブジェクトを生成すれば、テキストフ…

Accelerated C++ 第7章

連想コンテナ awkで慣れてるので特に目新しくはない。 ただ、 連想コンテナの要素はいつもキーに従って配列させられている は知らなかった。 nrand() 他でも使えそう。 課題 省略。

Accelerated C++ 第6章 続き

関数を表すパラメータ定義 慣れてないので気持ち悪いが、明示的にポインタで定義しなくても良い。 アルゴリズムの関数を使い始めると、結構関数(のポインタ)を引数に渡すことが多くなりそう。 課題 本中のソースに関連するもの、面白いくないものはばっさ…

C++の使いこなし

C++

Cに比べ、標準ライブラリが膨大。普段のプログラミングで使う範囲のものを覚えるまでが大変。ひたすら使いまくるしかないのだろうけど。 それまではヘルプで確認しつつ。

Accelerated C++ 第6章

さらにC++らしく。 ジェネリックアルゴリズム うまく使いこなせるとプログラムの記述量が減るのと、完成までの時間が短くなりそう。 使いこなせるまでが大変そうだけど。 反復子アダプタ 一番使われるらしい、back_inserter を覚えておこう。今日はここま…

Accelerated C++ 第5章

通勤電車の中で読み進めてるので課題ができない状態。TT 反復子 C++らしく(?)なってきた。 以前読んだときは今ひとつなじめなかったが、今回はすんなり入る(ように思う)。 標準ライブラリのコンテナの反復子は2種類 コンテナの型::const_iterator …

Accelerated C++ 第4章

見出しのつけ方をちょっと変更。 constでない参照パラメータ const参照のパラメータが時間的、空間的な効率の点は良いとして、「constでない参照パラメータは左辺値でなければなりません」というのは実装依存だろうか? コンパイラによってエラーにするかど…

Accelerated C++ 第3章 課題残り

3-3 vectorを2個使用して、単語そのものと、出現回数用の2個vectorを使う。でも連想配列(map)を使うのが素直。まだ出てきてないですが。 #include <iostream> #include <string> #include <vector> using std::cin; using std::cout; using std::endl; using std::vector; using std::</vector></string></iostream>…

Accelerated C++ 第3章

vector Cの配列よりは使いやすいコンテナクラス。 サイズに拡張に伴うメモリ割付などを面倒みてくれるが、組み込み機器で使うのはどうなんだろうか。実メモリシステムだとフラグメンテーションが怖い。(といいつつまだ遭遇したことはないわけだけど) 3.2.3…

Accelerated C++ 第2章

このあたりはざっと流して行きたいけど、課題を丁寧にやってると結構時間がかかるな。 ループの不変量(Loop Invariant)、不変な表明 「不変な表明」は、契約による設計への「不変条件」の意味か。 invariantそのものには不変量、不変式の意味があり、おぼろ…

Accelerated C++ 第1章

変数とオブジェジェクト 変数とオブジェクトの違いは重要です。 (中略) 名前のないオブジェクトも作れるからです。 C++はオブジェクト指向言語に類するのだなぉ。 入出力ライブラリのバッファがフラッシュされるケース バッファが一杯になった場合 標準入…

Accelerated C++ 序文

序文で惹かれた文。 詳細を無視できるということは、テクノロジーの成熟に特徴的です。 よくよく読むと、ちょっと日本語が変? ここで言う抽象とは「選択的な無視(selective ignorance)」のことです。 新しいプログラミング言語を学ぶとき、その言語のプロ…

Accelerated C++ 再読開始

ちょっとしたプログラムを書くのに拡張子をcppにしているけど、内容がほとんどCの範囲なので、改めて勉強しなおすことにする。 この本は3年ほど前に一度読んだもの。当時は結構わかった気になった。読み直しにあたっては、ひげぽん氏のルールを借用 知らなか…

Accelerated C++ 第0章

標準ヘッダ C++はヘッダファイルじゃないみたい。実装上は「ファイル」でないこともあるのかな? main関数の戻り値 main関数は特別で、returnを省略することもできる。その場合、mainは0を返すものとして扱われる。 不定かと思ってた。 #include <iostream.h> #include <process.h> </process.h></iostream.h>…