使用矢量迭代器
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::begin
和 std::end
(如果需要迭代器)或基于范围的 for
循环。
当向量的大小较小时,首选第一个选项。此外,如果您不打算使用它来更改矢量的内容,那么为什么要使用它?请改用迭代器。
阅读此内容以进行澄清。为什么使用迭代器而不是数组索引?
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 如何在C++中将迭代器作为函数参数传递
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 为什么 C++ std::unordered_map 从 emplace/ 找到返回一个迭代器?