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

C++中的迭代器

目录

摘要

迭代器类别

1. 输入迭代器(Input Iterator)

2. 输出迭代器(Output Iterator)

3. 前向迭代器(Forward Iterator)

4. 双向迭代器(Bidirectional Iterator)

5. 随机访问迭代器(Random Access Iterator)

总结

引用


摘要

在 C++ 中,迭代器(iterator)是用于遍历容器(如数组、链表、向量等)元素的对象。标准库(STL)中迭代器是一个重要的概念,类似于指针,但功能更强大。

根据不同的功能和特性,迭代器大致可以分为以下几类:

迭代器类别

- 输入迭代器(Input Iterator
- 输出迭代器(Output Iterator
- 前向迭代器(Forward Iterator
- 双向迭代器(Bidirectional Iterator
- 随机访问迭代器(Random Access Iterator

1. 输入迭代器(Input Iterator)

输入迭代器用于读取数据。它们支持只读访问,每个元素只能读取一次。

#include <iostream>
#include <vector>
#include <iterator>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};std::vector<int>::iterator it = vec.begin();std::cout << "Using input iterator: ";while (it != vec.end()) {std::cout << *it << " ";++it;}std::cout << std::endl;return 0;
}

2. 输出迭代器(Output Iterator)

输出迭代器用于写入数据。它们支持只写访问,每个元素只能写入一次。

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>int main() {std::vector<int> vec(5);std::ostream_iterator<int> out_it(std::cout, " ");for (int i = 0; i < 5; ++i) {vec[i] = i + 1;}std::cout << "Using output iterator: ";std::copy(vec.begin(), vec.end(), out_it);std::cout << std::endl;return 0;
}

3. 前向迭代器(Forward Iterator)

前向迭代器支持读写访问,并且可以多次遍历同一个元素,可以向前移动。

#include <iostream>
#include <forward_list>int main() {std::forward_list<int> flist = {1, 2, 3, 4, 5};std::forward_list<int>::iterator it;std::cout << "Using forward iterator: ";for (it = flist.begin(); it != flist.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}

4. 双向迭代器(Bidirectional Iterator)

双向迭代器支持读写访问,可以向前和向后移动。

#include <iostream>
#include <list>int main() {std::list<int> lst = {1, 2, 3, 4, 5};std::list<int>::iterator it;std::cout << "Using bidirectional iterator (forward): ";for (it = lst.begin(); it != lst.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;std::cout << "Using bidirectional iterator (backward): ";for (it = lst.end(); it != lst.begin();) {--it;std::cout << *it << " ";}std::cout << std::endl;return 0;
}

5. 随机访问迭代器(Random Access Iterator)

随机访问迭代器支持读写访问,并且可以以常数时间进行任意跳转,提供了类似指针的算术运算功能。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};std::vector<int>::iterator it = vec.begin();std::cout << "Using random access iterator: ";for (size_t i = 0; i < vec.size(); ++i) {std::cout << *(it + i) << " ";}std::cout << std::endl;std::cout << "Using random access iterator for arithmetic operations: ";it += 2;std::cout << *it << " ";it -= 1;std::cout << *it << std::endl;return 0;
}

总结

1. 有效性:确保迭代器在使用过程中始终有效。例如,插入或删除元素后,某些容器的迭代器可能失效。
2. 边界检查:使用迭代器时,要注意不要超出容器的边界,否则可能会导致泄漏问题。
3. 类型匹配:使用合适的迭代器类型来匹配容器类型。
4. 算法和迭代器:STL 算法通常使用迭代器作为参数,确保传递的迭代器满足算法的要求。

在C++ 中,迭代器提供了一种通用的方式来遍历和操作容器中的元素。根据我们实际开发项目不同的需求,选择合适的迭代器可以更有效地进行数据操作和算法应用。

引用

Iterator library - cppreference.com

相关文章:

C++中的迭代器

目录 摘要 迭代器类别 1. 输入迭代器&#xff08;Input Iterator&#xff09; 2. 输出迭代器&#xff08;Output Iterator&#xff09; 3. 前向迭代器&#xff08;Forward Iterator&#xff09; 4. 双向迭代器&#xff08;Bidirectional Iterator&#xff09; 5. 随机访…...

8.1 Go 包的概念与使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

第一篇【传奇开心果系列】AI工业应用经典算法和Python示例:基于AI的智能制造技术经典算法与Python实践

传奇开心果博文系列 系列博文目录AI工业应用经典算法和Python示例系列 博文目录前言一、AI在智能制造方面的应用场景介绍二、基于AI的智能制造技术经典算法介绍三、支持向量机机器学习算法Python示例代码四、随机森林机器学习算法Python示例代码五、深度学习算法Python示例代码…...

Mathtype插入编号的高级格式会重置之前的简单格式的问题

文章标题没说人话&#xff0c;大致意思是&#xff1a; 先以简单格式插入几个编号 再设置高级格式的编号时&#xff0c;即使没有选择插入编号&#xff0c;在点击下图的确定键时&#xff0c;会连带前面的简单公式一并更新 我在网上没有找到相关的问题&#xff0c;即使关闭了…...

弘君资本:存储芯片概念强势,西测测试三连板,佰维存储涨超10%

存储芯片概念3日盘中强势拉升&#xff0c;截至发稿&#xff0c;西测测验、万润科技涨停&#xff0c;佰维存储涨超10%&#xff0c;香农芯创涨近7%&#xff0c;航天智装、普冉股份等涨超5%。值得注意的是&#xff0c;西测测验已连续3个交易日涨停。 职业方面&#xff0c;当时干流…...

【机器学习】逻辑回归:原理、应用与实践

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 逻辑回归&#xff1a;原理、应用与实践引言1. 逻辑回归基础1.1 基本概念1.2 Sig…...

C++:list模拟实现

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;list模拟实现》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&#xff01;&#xf…...

植物大战僵尸杂交版全平台 PC MAC 安卓手机下载安装详细图文教程

最近植物大战僵尸杂交版非常的火&#xff0c;好多小伙伴都想玩一玩&#xff0c;但作者只分享了 win 版&#xff0c;像手机还有MAC电脑都没有办法安装&#xff0c;身为 MAC 党当然不能放弃&#xff0c;经过一番折腾&#xff0c;也是成功在所有平台包括手机和MAC电脑都成功安装上…...

发送Http请求的两种方式

说明&#xff1a;在项目中&#xff0c;我们有时会需要调用第三方接口&#xff0c;获取调用结果&#xff0c;来实现自己的业务逻辑。调用第三方接口&#xff0c;通常是双方确定好&#xff0c;由对方开放一个接口&#xff0c;需要我们根据他们提供的接口文档&#xff0c;组装Http…...

【算法训练记录——Day23】

Day23——二叉树Ⅸ 669.修剪二叉搜索树108.将有序数组转换为二叉搜索树538.把二叉搜索树转换为累加树 今日内容&#xff1a; ● 669.修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树 ● 总结篇 669.修剪二叉搜索树 思路&#xff1a;主要是…...

【wiki知识库】04.SpringBoot后端实现电子书的增删改查以及前端界面的展示

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日内容 二、&#x1f30f;前端页面的改造 2.1新增电子书管理页面 2.2新增路由规则 2.3修改the-header代码 三、&#x1f697;SpringBoot后端Ebook模块改造 3.1增加电子书增/改接口 3.1.…...

NTLM Relay Gat:自动化NTLM中继安全检测工具

关于NTLM Relay Gat NTLM Relay Gat是一款功能强大的NTLM中继威胁检测工具&#xff0c;该工具旨在利用Impacket工具套件中的ntlmrelayx.py脚本在目标环境中实现NTLM中继攻击风险检测&#xff0c;以帮助研究人员确定目标环境是否能够抵御NTLM中继攻击。 功能介绍 1、多线程支持…...

摸鱼大数据——Hive函数14

14、开窗(开列)函数 官网链接&#xff1a;Window Functions - Apache AsterixDB - Apache Software Foundation 14.1 基础使用 开窗函数格式: 开窗函数 over(partition by 分组字段名 [order by 排序字段名 asc|desc] [rows between 开窗开始 and 开窗结束]) ​ partition b…...

elasticsearch的常规操作--增删改查和批量处理

1、_cat 查询 GET /_cat/nodes&#xff1a; 查看所有节点 GET /_cat/health&#xff1a; 查看es 健康状况 GET /_cat/master&#xff1a; 查看主节点 GET /_cat/indices&#xff1a;查看所有索引show databases; 2、索引一个文档&#xff08;保存&#xff09; 保存一个数据&…...

盘点2024年还在活跃发版的开源私有网盘项目附源码链接

时不时的会有客户上门咨询&#xff0c;丰盘ECM是不是开源项目&#xff0c;源码在哪里可以下载&#xff1b;如果需要和内部其他系统做集成&#xff0c;购买商业版的话&#xff0c;能否提供源代码做二次开发呢&#xff0c;等等诸多问题。 这里做个统一回复&#xff0c;丰盘ECM产…...

MySQL 使用方法以及教程

一、引言 MySQL是一个流行的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛应用于Web开发、数据分析等领域。它提供了高效、稳定的数据存储和查询功能。同时&#xff0c;Python作为一种强大的编程语言&#xff0c;也提供了多种与MySQL交互的库&#…...

算法学习笔记——二进制

二进制 负数的十进制转二进制数&#xff08;-2 -> 1110&#xff09;&#xff1a; 正数 - 1&#xff0c;再取反&#xff0c;得到负数的二进制。 例如&#xff1a;-2 &#xff1a;0010 -> 0010 - 1 -> 0001 -> 取反 -> 1110 负数的二进制转十进制&#xff08;…...

计算机网络介绍

计算机网络介绍 概述网络概述相关硬件 链路层VLAN概念VLAN 特点VLAN 的划分帧格式端口类型原理 STP概念特点原理 Smart Link概念特点组网 网络层ARP概念原理 IP概念版本IP 地址 IPv4IP 地址数据报格式 IPv6特点IP 地址数据报格式 ICMP概念分类报文格式 VRRP概念原理报文格式 OS…...

解锁数据宝藏:高效查找算法揭秘

代码下载链接&#xff1a;https://gitee.com/flying-wolf-loves-learning/data-structure.git 目录 一、查找的原理 1.1 查找概念 1.2 查找方法 1.3平均查找长度 1.4顺序表的查找 1.5 顺序表的查找算法及分析 1.6 折半查找算法及分析 1.7 分块查找算法及分析 1.8 总结…...

利用EasyCVR视频智能监控技术,构建智慧化考场监管体系

随着科技的进步&#xff0c;视频监控在各个领域的应用越来越广泛&#xff0c;其中在考场中的应用尤为显著。视频监控不仅能够提高考场的监管水平&#xff0c;确保考试的公平、公正和公开&#xff0c;还能有效预防和打击作弊行为&#xff0c;为考生营造一个良好的考试环境。 传…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...