当迭代向量的元素时,最好使用迭代器而不是索引(请参阅为什么使用迭代器而不是数组索引?)。
std::vector<T> vec;
std::vector<T>::iterator it;
for ( it = vec.begin(); it != vec.end(); ++it )
{
// do work
}
但是,可能需要在循环体中使用索引。在这种情况下,考虑到性能和灵活性/可扩展性,以下哪一项更可取?
- 恢复到索引循环
标准::向量向量; 尺寸_t我; 对于 ( i = 0; i < vec.size(); ++i ) { // 使用我 }
- 计算偏移量
标准::向量向量; std::vector::iterator it; 对于 (它 = vec.begin(); 它!= vec.end(); ++it) { size_t i = 它 - vec.begin(); // 使用我 }
- 使用 std::distance
标准::向量向量; std::vector::iterator it; 对于 (它 = vec.begin(); 它!= vec.end(); ++it) { size_t i = std::distance(vec.begin(), it); // 使用我 }