迭代遍歷向量的元素時,最好使用迭代器而不是索引(請參閱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