ベクトルの要素を反復処理するときは、インデックスの代わりに反復子を使用することをお勧めします (配列インデックスの代わりに反復子を使用する理由を参照してください)。
std::vector<T> vec;
std::vector<T>::iterator it;
for ( it = vec.begin(); it != vec.end(); ++it )
{
// do work
}
ただし、ループの本体でインデックスを使用する必要がある場合があります。その場合、パフォーマンスと柔軟性/拡張性を考慮して、次のうちどれが望ましいでしょうか?
- インデックス付きループに戻る
std::vector vec; size_t i; for ( i = 0; i < vec.size(); ++i ) { // i を使用 }
- オフセットを計算する
std::vector vec; std::vector::iterator it; for ( it = vec.begin(); it != vec.end(); ++it ) { size_t i = それ - vec.begin(); // i を使用 }
- std::distance を使用する
std::vector vec; std::vector::iterator it; for ( it = vec.begin(); it != vec.end(); ++it ) { size_t i = std::distance( vec.begin(), it ); // i を使用 }