std::list<int> list;
list.push_back(1);
list.push_back(2);
list.push_back(3);
list.push_back(4);
int total = 0;
for (auto itr = list.begin(), end_ = list.end(); itr != end_; itr++) {
total += (int)*itr;
}
どうってことないサンプルコードだけどポイントは2つ、・autoでIteratorの型を宣言
autoで型を宣言すると正しい型を類推してくれる。autoを使わないで書くと「std::list<int>::iterator itr」だけどこれで書くと1行には収まらない。
autoを使うだけですごく短くなるし、ぎりぎり1行に収まるので便利。
・forの初期化でend()を変数に代入
終了条件の判定で「itr != list.end()」と書いても同じだけど、ループの終了条件で関数を呼び出すのは精神衛生に良くない。これはIBMのJavaコーディング規約にも載ってるらしい(見たことないけど)。javaの場合は
int total = 0;
for (int i = 0, l = array.length; i < l; i++) {
total += array[i]);
}
みたいな?
0 件のコメント:
コメントを投稿