これはつまらないことのように思えるかもしれませんが、STL コンテナーを反復処理する次の 2 つの方法のうち、どちらが優れているでしょうか? なぜですか?
class Elem;
typedef vector<Elem> ElemVec;
ElemVec elemVec;
// Method 0
for (ElemVec::iterator i = elemVec.begin(); i != elemVec.end(); ++i)
{
Elem& e = *i;
// Do something
}
// Method 1
for (int i = 0; i < elemVec.size(); ++i)
{
Elem& e = elemVec.at(i);
// Do something
}
方法 0 はよりクリーンな STL のように見えますが、方法 1 はより少ないコードで同じことを達成します。コンテナーに対する単純な反復は、ソース コードのいたるところに見られるものです。したがって、私は方法 1 を選択する傾向があります。方法 1 は視覚的な混乱とコード サイズを削減すると思われます。
PS: イテレータは単純なインデックスよりもはるかに多くのことができることを知っています。ただし、返信/ディスカッションは、上記のようなコンテナーに対する単純な反復に集中してください。