使用矢量迭代器

Use of vector iterator

本文关键字:迭代器      更新时间:2023-10-16

这更像是一个概念上的疑问。我正在学习在C++中使用向量。

在遍历向量时,我可以通过两种方式完成:

vector<int> temp;
for (int j = 0; j < 10; j++){     
    temp.push_back(j);
}
int sum1 = 0;
int sum2 = 0;
//Method 1: almost treating it like an array
for (int i = 0; i < temp.size(); i++){
    sum1 = sum1 + temp[i];
}
//Method 2: using an iterator
vector<int>::iterator it;
for(it = temp.begin(); it < temp.end(); it++) {     
    sum2 = sum2 + *it;
}

两种方法都运行良好,并产生了预期的结果。但是,我注意到大多数建议的代码(在堆栈交换等上)都使用迭代器。这有什么具体的原因还是只是出于方便?

迭代器更通用。使用迭代器,您可以使用任何支持迭代器的类。如果您使用"方法 1",那么您仅限于向量和std::array

我什至会更进一步,停止使用 container.begin()container.end() ,而是使用 std::beginstd::end(如果需要迭代器)或基于范围的 for 循环。

当向量的大小较小时,首选第一个选项。此外,如果您不打算使用它来更改矢量的内容,那么为什么要使用它?请改用迭代器。

阅读此内容以进行澄清。为什么使用迭代器而不是数组索引?