迭代遍历向量的元素时,最好使用迭代器而不是索引(请参阅Why use iterators instead of array indices?)。使用迭代器获取向量的索引
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) { // use i }
- 计算偏移
std::vector vec; std::vector::iterator it; for (it = vec.begin(); it != vec.end(); ++it) { size_t i = it - vec.begin(); // use i }
- 使用std ::距离
std::vector vec; std::vector::iterator it; for (it = vec.begin(); it != vec.end(); ++it) { size_t i = std::distance(vec.begin(), it); // use i }
忘了提到性能,通常假设索引循环会有更好的性能是安全的,但在这两种情况下性能会非常相似。 – Guvante 2008-09-25 09:39:32