コンテナーを反復処理する C++11 で記述されたテンプレート関数を考えてみましょう。私が使用しているコンパイラではまだサポートされていないため、範囲ループ構文は考慮から除外してください。
template <typename Container>
void DoSomething(const Container& i_container)
{
// Option #1
for (auto it = std::begin(i_container); it != std::end(i_container); ++it)
{
// do something with *it
}
// Option #2
std::for_each(std::begin(i_container), std::end(i_container),
[] (typename Container::const_reference element)
{
// do something with element
});
}
std::for_each
forループと次の点の長所/短所は何ですか?
パフォーマンス?(違いはないと思います)
b) 可読性と保守性?
ここに の多くの欠点が見られfor_each
ます。ループがそうする間、それはcスタイルの配列を受け入れません。ラムダ仮パラメータの宣言は非常に冗長であるため、auto
そこでは使用できません。から抜け出すことはできませんfor_each
。
C++11 より前の時代for
には、イテレータの型を指定する必要があること (これ以上は成り立たない) と、ループ条件のタイプを間違える可能性があること (私はこの 10 年間でそのような間違いをしたことがありません) に対する反対意見がありました。
結論として、私の考えfor_each
は一般的な意見と矛盾しています。ここで何が欠けていますか?