当迭代 vector 的元素时,最好使用迭代器而不是索引(参见 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
}
但是,可能需要在循环体中使用索引。考虑到性能和灵 active /可扩展性,在这种情况下,以下哪项更可取?
- 回到索引循环
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::distance
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 }
最佳答案
如果您计划只使用 vector ,您可能希望切换回索引循环,因为它比迭代器循环更清楚地传达您的意图。但是,如果您的程序在未来的发展可能会导致容器发生变化,您应该坚持使用迭代器并使用 std::distance,它保证适用于所有标准迭代器。
关于c++ - 使用迭代器获取 vector 的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/132323/