迭代器

在C++中,迭代器是一种抽象概念,用于遍历容器中的元素。迭代器提供了一种标准的方法来访问容器中的元素,而不需要了解容器的内部结构。迭代器可以被视为指向容器中元素的指针,并且它们支持多种操作,如递增、递减、解引用等。

迭代器通常与容器类一起使用,如std::vector、std::map、std::set等,不同的容器可能支持不同类型的迭代器。

迭代器的分类:

  1. 输入迭代器(Input Iterator):
    • 只能单向遍历容器
    • 只能进行一次读取操作
  2. 输出迭代器(Output Iterator):
    • 只能单向遍历容器
    • 只能进行一次写入操作
  3. 前向迭代器(Forward Iterator):
    • 支持向前遍历
    • 可以进行多次读取操作
  4. 双向迭代器(Bidirectional Iterator):
    • 支持向前和向后遍历
  5. 随机访问迭代器(Random Access Iterator):
    • 支持向前和向后遍历,以及随机访问
    • 可以进行复杂的遍历操作,如直接跳转到特定位置

迭代器的操作:

  1. 递增和递减:

    • ++iterator:将迭代器向前移动到下一个元素

    • –iterator:将迭代器向后移动到上一个元素

      std::vector<int> vec = { 1, 2, 3, 4, 5 };
      
      for (auto it = vec.begin(); it != vec.end(); ++it) {
          std::cout << *it << std::endl;  
          std::cout << *(++it) << std::endl;
          std::cout << *(--it) << std::endl;
          if (*it == 2) {
              break;
          }
      }
      ---------
      1
      2
      1
      2
      3
      2
      
  2. 解引用:

    • *iterator:访问迭代器当前指向的元素

      std::vector<int> vec = { 1, 2, 3, 4, 5 };
      
      // 使用迭代器遍历vector
      for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
          std::cout << *it << " ";  // 1 2 3 4 5
      }
      std::cout << std::endl;
      
      // 使用auto关键字简化迭代器的类型
      for (auto it = vec.begin(); it != vec.end(); ++it) {
          std::cout << *it << " ";  // 1 2 3 4 5
      }
      std::cout << std::endl;
      
      // 使用基于范围的for循环(C++11及以上)
      for (int val : vec) {
          std::cout << val << " ";  // 1 2 3 4 5
      }
      std::cout << std::endl;
      
      // 使用指针遍历vector
      int* ptr = vec.data();  // 获取指向vector数据的指针
      for (int i = 0; i < vec.size(); ++i) {
          std::cout << ptr[i] << " ";  // 1 2 3 4 5
      }
      
  3. 成员访问运算符:

    • iterator->member:访问迭代器当前指向的元素的成员
  4. 比较:

    • iterator1 == iterator2:检查两个迭代器是否相等
    • iterator1 != iterator2:检查两个迭代器是否不相等

使用迭代器需要注意的几点:

  • 迭代器的类型应该与容器的类型相匹配
  • 在容器的末尾使用迭代器时要小心,因为vec.end()返回的是尾后迭代器,它不等于任何有效的元素迭代器
  • 修改容器(如插入或删除元素)可能会使迭代器失效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值