iterator(迭代器) 的作用是作为容器元素的指针或位置指示器,提供了一种统一的方式来访问和遍历容器中的元素。
迭代器的主要作用:
-
元素访问和定位
auto max_it = max_element(vec.begin(), vec.end());
max_it 是一个迭代器,指向vector中最大元素的位置
类似于指针,可以通过 *max_it 访问该元素的值
2. 通用算法接口
// 各种STL算法都使用迭代器作为参数
sort(vec.begin(), vec.end()); // 排序
auto it = find(vec.begin(), vec.end(), 5); // 查找
reverse(vec.begin(), vec.end()); // 反转
3. 位置计算
int max_index = distance(vec.begin(), max_it);
std::distance 计算两个迭代器之间的距离(元素个数)
通过迭代器可以确定元素在容器中的具***置
示例
#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6};
// 使用max_element找到最大元素的迭代器
auto max_it = max_element(vec.begin(), vec.end());
// 使用distance计算索引
int max_index = distance(vec.begin(), max_it);
// 通过迭代器访问元素值
cout << "最大值: " << *max_it << endl; // 输出: 最大值: 9
cout << "最大值索引: " << max_index << endl; // 输出: 最大值索引: 5
cout << "最大值迭代器: " << &*max_it << endl; // 内存地址
// 通过迭代器修改元素
*max_it = 100;
cout << "修改后的最大值: " << *max_it << endl; // 输出: 100
cout << "位置仍然在: " << max_index << endl; // 位置还是:5
// 演示其他使用迭代器的算法
sort(vec.begin(), vec.end()); // 排序
auto it = find(vec.begin(), vec.end(), 4); // 查找元素
if (it != vec.end()) {
cout << "找到元素4,索引为: " << distance(vec.begin(), it) << endl;
}
// 使用迭代器遍历容器
cout << "排序后的vector: ";
for (auto it = vec.begin(); it != vec.end(); ++it) {
cout << *it << " ";
}
cout << endl;
// iterator的算术运算(随机访问iterator)
auto second_it = vec.begin() + 2; // iterator支持指针般的算术运算
cout << "第3个元素: " << *second_it << endl;
return 0;
}