iterator(迭代器) 的作用是作为容器元素的指针或位置指示器,提供了一种统一的方式来访问和遍历容器中的元素。

迭代器的主要作用:

  1. 元素访问和定位

     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;
  }