当前位置: 首页 > news >正文

c++ 迭代器分类及详细讲解

c++ 迭代器分类及详细讲解

      • 迭代器分类及详细讲解
        • 1. 输入迭代器(Input Iterator)
        • 2. 输出迭代器(Output Iterator)
        • 3. 前向迭代器(Forward Iterator)
        • 4. 双向迭代器(Bidirectional Iterator)
        • 5. 随机访问迭代器(Random Access Iterator)
      • 总结

迭代器分类及详细讲解

迭代器是C++标准库中用于访问容器元素的通用接口。不同类型的迭代器提供了不同的功能,泛型算法可以根据迭代器的类型进行优化。以下是迭代器的分类及其典型应用:

1. 输入迭代器(Input Iterator)
  • 功能:只能读取元素,且只能单向递增(即只能向前移动)。
  • 操作:支持 *it(解引用)、it->(访问成员)、++it(前置递增)、it++(后置递增)、it1 == it2(比较相等)、it1 != it2(比较不等)。
  • 典型应用find 算法。
  • 例子
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main() {
        std::vector<int> vec = {1, 2, 3, 4, 5};
        auto it = std::find(vec.begin(), vec.end(), 3);
        if (it != vec.end()) {
            std::cout << "Found: " << *it << std::endl;
        } else {
            std::cout << "Not found" << std::endl;
        }
        return 0;
    }
    
    在这个例子中,find 算法使用输入迭代器遍历容器,查找值为 3 的元素。
2. 输出迭代器(Output Iterator)
  • 功能:只能写入元素,且只能单向递增。
  • 操作:支持 *it = value(赋值)、++it(前置递增)、it++(后置递增)。
  • 典型应用copy 算法。
  • 例子
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main() {
        std::vector<int> src = {1, 2, 3, 4, 5};
        std::vector<int> dst(5);
        std::copy(src.begin(), src.end(), dst.begin());
        for (int i : dst) {
            std::cout << i << " ";
        }
        return 0;
    }
    
    在这个例子中,copy 算法使用输出迭代器将 src 中的元素复制到 dst 中。
3. 前向迭代器(Forward Iterator)
  • 功能:可读写元素,且只能单向递增。
  • 操作:支持输入迭代器和输出迭代器的所有操作,且可以多次遍历同一范围。
  • 典型应用replace 算法。
  • 例子
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main() {
        std::vector<int> vec = {1, 2, 3, 4, 5};
        std::replace(vec.begin(), vec.end(), 3, 99);
        for (int i : vec) {
            std::cout << i << " ";
        }
        return 0;
    }
    
    在这个例子中,replace 算法使用前向迭代器遍历容器,并将所有值为 3 的元素替换为 99
4. 双向迭代器(Bidirectional Iterator)
  • 功能:可读写元素,且可以双向移动(递增和递减)。
  • 操作:支持前向迭代器的所有操作,且支持 --it(前置递减)、it--(后置递减)。
  • 典型应用reverse 算法。
  • 例子
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main() {
        std::vector<int> vec = {1, 2, 3, 4, 5};
        std::reverse(vec.begin(), vec.end());
        for (int i : vec) {
            std::cout << i << " ";
        }
        return 0;
    }
    
    在这个例子中,reverse 算法使用双向迭代器将容器中的元素逆序。
5. 随机访问迭代器(Random Access Iterator)
  • 功能:可读写元素,且可以在常数时间内移动任意距离。
  • 操作:支持双向迭代器的所有操作,且支持 it + nit - nit += nit -= nit1 - it2it[n]it1 < it2 等操作。
  • 典型应用sort 算法。
  • 例子
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main() {
        std::vector<int> vec = {5, 3, 1, 4, 2};
        std::sort(vec.begin(), vec.end());
        for (int i : vec) {
            std::cout << i << " ";
        }
        return 0;
    }
    
    在这个例子中,sort 算法使用随机访问迭代器对容器中的元素进行排序。

总结

迭代器的分类决定了它们的功能和性能特性。泛型算法通过利用迭代器的不同类型来实现高效的操作。理解迭代器的分类及其典型应用,有助于编写高效且通用的C++代码。

相关文章:

  • 【测试开发面试题】每日 3 题(三)
  • Trae:国内首款AI原生IDE,编程效率大提升
  • doris:Paimon Catalog
  • 智能差旅管理新范式:MyAgent如何重塑企业差旅全流程自动化
  • 【uniapp】离线打包uniapp为apk详细步骤
  • 腾讯三面:写文件时进程宕机,数据会丢失吗?
  • 基于springboot+vue3图书借阅管理系统
  • MySQL笔记---Ubuntu环境下从零开始的MySQL
  • 【0013】HTML超链接标签详解
  • 【go语言】——方法集
  • 开源工具推荐:Uptime Kuma监控
  • 【Python 3.12.1 颠覆性升级:GIL 解锁与性能飞跃,开启多线程新时代】
  • C++ 将jpg图片变成16位565bmp图片
  • 直播预告|TinyEngine低代码引擎v2.2版本特性介绍
  • LabVIEW基于IMAQ实现直线边缘检测
  • µC/OS-III-事件标志
  • 探索 C 语言:编程世界的基石
  • 在kali linux中kafka的配置和使用
  • mysql深度分页优化方案
  • Redis 同步机制详解
  • 中国建设银行纪念币预约网站/潮州网络推广
  • 网站建设流程有哪些/合肥网站建设公司
  • html个人网站模版/关键词优化软件哪家好
  • 谁会在阿里云建网站/seo新人怎么发外链
  • 免费个人网站自助建设/免费推广的方式
  • 网站为什么做微云的采集/seo优化师就业前景