通常、次のような STL コードが見つかります。
for (SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin(); Iter != m_SomeMemberContainerVar.end(); ++Iter)
{
}
しかし、実際には次のように記述することをお勧めします。
SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin();
SomeClass::SomeContainer::iterator IterEnd = m_SomeMemberContainerVar.end();
for (; Iter != IterEnd; ++Iter)
{
}
スコープが心配な場合は、中かっこを追加します。
{
SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin();
SomeClass::SomeContainer::iterator IterEnd = m_SomeMemberContainerVar.end();
for (; Iter != IterEnd; ++Iter)
{
}
}
.end() 関数はループの各反復で呼び出されないため、特にコンソールをプログラミングしている場合は、これにより速度と効率が向上するはずです。私はパフォーマンスの向上を当然のことと考えています。合理的に聞こえますが、どの程度かはわかりません。また、使用しているコンテナーの種類と実際の STL 実装によって異なります。しかし、このスタイルを数か月間使用した今、私はとにかく最初のスタイルよりも実際に気に入っています.
その理由は読みやすさです: for 行はきちんと整頓されています。最初の例のスタイルを使用すると、実際のプロダクション コードで修飾子とメンバー変数を使用すると、非常に長い行を簡単に作成できます。そのため、この例では意図的に水平スクロール バーを表示するようにしました。;)
一方、for ループの外側のスコープに Iter 変数を突然導入します。しかし、少なくとも私が働いている環境では、最初の例でも外側のスコープで Iter にアクセスできたはずです。
これについてどう思いますか?Iter の範囲を制限する可能性以外に、最初のスタイルの長所はありますか?