在迭代向量元素时,最好使用迭代器而不是索引(请参见为什么使用迭代器而不是数组索引?)。
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 = it - 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 }