Aritalab:Lecture/Programming/Cpp/Tips
From Metabolomics.JP
C++プログラムのコツ
- out << "\n"と、out << endl の違い
out << endl と書くと
out << "\n"; out.flush();
と同じことになるため、頻繁に利用する場合は前者のほうが効率が良い。
- イテレータのインクリメントは前置にする
for(vector<string>::iterator itr=V.begin(); itr != V.end(); ++itr)のようなコードを書く際に、itr++と書かないのには理由があります。 基本データ型でない場合、インクリメント演算子の定義は以下のようになります。戻り値の型に注意してください。後置オペレータは処理の後にインクリメントするため、返り値がインクリメントする前の状態にしないといけません。
iterator operator++(int)
{ //後置
iterator _Tmp = *this;
++*this;
return _Tmp;
}
iterator& operator++()
{ //前置
++*this;
return *this;
}
このためオーバーロードする関数の中でコピーコンストラクタによるオブジェクトの作成と、作成したオブジェクトを戻す際に再びコピーと、余分にオブジェクトが作成されるのです。 こうした余分な処理を含まないため、前置インクリメントを使います。(ただし、基本データタイプについてはどちらでも同じです。)