c++迭代器

【C++】深入理解迭代器(Iterator) C++ 是一门功能强大的编程语言,其标准库(STL, Standard Template Library)提供了多种高效的工具来处理数据。其中,迭代器(Iterator)是一种极为重要的工具,可以帮助开发者优雅地操作容器,遍历、访问和修改数据。迭代器的作用类似于指针,但比指针更强大和灵活。本文将以 std::string 为例,结合代码和图示,从基本概念到实际应用,带领读者深入理解 C++ 中迭代器的核心功能和用法。 2025.1.8-✍210min 阅读详情

c++迭代器

定义

迭代器是一种检查容器内元素并遍历元素的数据类型。
标准库为每一种标准容器(包括 vector)定义了一种迭代器类型。迭代器
类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代
器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现
代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下
标操作的 vector 类型也是这样。
例如:
vector::iterator it1;
vector::iterator it2;

begin操作

迭代器的bigin()函数返回迭代器的第一个元素。

end操作

迭代器的end()函数返回迭代器“末端元素的下一个”。表明它指向了一个不存在的元素。

迭代器的自增和解引用运算

迭代器类型可使用解引用操作符(dereference operator)(*)来访问迭
代器所指向的元素:
*iter = 0;

迭代器比较

可以用 == 或者 != 操作符来比较两个迭代器,如果两个迭代器指向同一个元素,则相等,否则不等。

迭代器使用示例

vector<string> vectorStr(4, "hello");
vector<string>::iterator itstr;
for (itstr = vectorStr.begin(); itstr != vectorStr.end(); ++itstr)
 {
     cout << *itstr <<" ";
 }
 cout << endl;

迭代器的算术操作

iter + n //表示迭代器向前偏移N个元素。
iter - n //表示迭代器向后偏移N个元素。
iter1 - iter2 //表示两个迭代器之间的距离。

例如:可以通过下面的方法获取某个vector中的中间元素
vector::iterator mid = vi.begin() + vi.size() / 2;

ps 注意:

任何改变 vector 长度的操作都会使已存在的迭代器失效。例
如,在调用 push_back 之后,就不能再信赖指向 vector 的迭
代器的值了。

参考《c++ primer 第四版》

C++反向迭代器 还需要注意的是:正向迭代器的begin()和end()作为reverse_itertor或者const_reverse_iterator的参数时,如果使用重载的- -的话可能会出现问题:比如- -end()或者end()- -做反向迭代器的参数的话,由于end()是一个Iterator类型的迭代器,并且end()是一个临时对象;跟我们自己实现的反向迭代器有所差异,它反向的rbegin()就是正向的end(),反向的rend()就是正向的begin()。那标准库中的反向迭代器是怎么实现的呢? 阅读详情

相关推荐

保姆级教程:用Unidbg搞定阿里系App的x-sign和长x-mini-wua签名(附完整Java代码)

本文详细介绍了如何使用Unidbg框架模拟执行阿里系App的原生库,生成关键的x-sign和x-mini-wua签名参数。通过完整的Java代码示例和实战技巧,帮助开发者高效实现签名算法,适用于安全研究、数据分析和第三方应用开发场景。

weixin_29243279的博客 484

[C++] 迭代器

对迭代器的介绍

A_ns_wer_的博客 7415

在PyCharm中配置使用Anaconda环境

在PyCharm中配置使用Anaconda环境一、步骤1.Anaconda2.PyCharm总结 一、步骤 1.Anaconda 如未安装Anaconda可至其官网下载,学习使用个人版就可以了。 下载地址:https://www.anaconda.com/products/individual 1、打开Anaconda Navigator,点击Environments可以看到anaconda中已经有了默认的“base”环境,其中包含了大多数我们会用到的包,在PyCharm中可以直接使用该环境,而无需自行下载

TuckX的博客 19万+

【C++】迭代器

1. 迭代器 2. begin和end成员 3. 容器操作可能使迭代器失效 4. 反向迭代器

Qiuhan_909的博客 7371

Cadence17.2 > OrCAD Capture CIS > 设计规则检查(Design Rule Check)DRC学习记录详解

选中设计完成的DSN文件,选择Tool->Design Rule Check,弹出下面对话框,详解如下。 一、Design Rule Check对话框选项详解 Design Rules Options tab Set the scope, mode and type of design rule (electrical and / or physical) test options for the design rules check. 为

DL_62532的专栏 1万+

Multisim实现555计时器模拟简易电子琴

一. 元器件介绍 这里用到的元器件有: DIgital power(VCC)数字电源 频率计数器(XFC) 示波器(XSC) ground 数字地 Capacitan 电容器 Resistor 电阻器 555_VIRTUAL 555计时器 触发按键(DIPSW)(DPST)(SPST)

是你呀星途的博客 2万+

C++之迭代器

迭代器(Iterator)是按照一定的顺序对一个或多个容器中的元素从前往遍历的一种机制,比如for循环就是一种最简单的迭代器,对一个数组的遍历也是一种的迭代遍历的过程。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器有时也称为枚举器(Enumerator),其结构图如下:迭代器结构图迭代器其实就是维护一个当前的指针,这个指针可以指向当前的元素,可以返回当前所指向的元素,可以移到下一个元素的位置,通过这个指针可以遍历容器的所有元素。

阳光日志 4898

YOLO26模型应用过程中的报错处理及疑问解答,涉及环境搭建、模型训练、模块改进、论文写作

本文记录了YOLO26模型的这一系列过程中可能发生的问题,以及大家非常关心的问题,这里统一做了一个记录和解答。

Limiiiing的博客 239

C++迭代器

什么是迭代器: C++中,迭代器就是一个类似于指针的对象,它能够用来遍历C++标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。以下面的string为例子介绍说明。 对string 对象s1正向遍历输出,代码如下所示: string::iterator it = s.begin(); //此处的begin()函数有两个重载函数,分别是 //iterator begin(); //const_iterator begin() const; //调用他们的对象,分别是可以

weixin_41368411的博客 2万+

【DRAM存储器三十五】LPDDR4介绍--主要技术特性之VREF training,为什么要做VREF training?

详述DDR4、LPDDR4需要做vref training的原因和训练过程

highman110的博客 2914

使用 Python 构建 Reddit 热帖爬虫:抓取热门讨论帖和评论

在现代互联网中,Reddit 被誉为全球最大、最活跃的讨论平台之一,汇聚了各种主题的帖子、评论和社交互动。因此,抓取 Reddit 上的热门帖子和评论可以为我们提供一个丰富的文本数据源,可以用于情感分析、话题建模、趋势分析等应用。Reddit 提供了官方的 API,可以让开发者获取包括帖子、评论、用户信息等在内的各种数据。我们可以结合上述方法,抓取多个热门帖子,并将每个帖子的标题、作者、发布时间和评论内容保存到一个数据结构中。每个帖子的对象包含了丰富的信息,如标题、内容、发布时间、作者等。

2201_76125261的博客 381

c++ 迭代器能修改其值吗_CPP迭代器升级详解

迭代器迭代器是一种检查容器内元素并遍历元素的数据类型。作用迭代器提供了一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器模式Iterator模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露改对象的内部表示。详参C++迭代器 iterator - chao_yu - 博客园C++迭代器 iterator - chao_yu - 博客园迭代器...

weixin_33181210的博客 2306

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【C++】迭代器、反向迭代器详解

http://c.biancheng.net/view/338.html https://blog.youkuaiyun.com/kjing/article/details/6936325 https://blog.youkuaiyun.com/qq_22194315/article/details/57144854 一、迭代器 1. 概述 要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读..

lemonxiaoxiao的博客 6037

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

55 CPP 迭代器

resize()、reserve()、assign()、push_back()、pop_back()、insert()、erase()等函数会引起vector容器的动态数组发生变化,可能导致vector迭代器失效。在某些容器中,迭代器是指针,在某些容器中,迭代器是类,封装了指针和移动指针的方法的类。具备正向迭代器的功能,还可以反向(从右到左)遍历容器(也是用++),不管是正向还是反向遍历,都可以用--让迭代器后退一个元素。// 常反向迭代器。如果使用迭代器,不同的容器,访问元素的方法是相同的。

wade1010的专栏 481

C++迭代器(STL迭代器)iterator详解

要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。 迭代器按照定义方式分成以下四种。 1) 正向迭代器,定义方法如下: 容器类名::iterator 迭代器名; 2) 常量正向迭代器,定义方法如下: 容器类名::const_iterator 迭代器名; 3) 反向迭代器,定义方法如下: 容器类名::revers

m0_49330686的博客 1万+

C++ 迭代器 Iterator

C++ 迭代器 Iterator

chenyfan_blog 8189

N迭代器.cpp

本文介绍了C++中迭代器的基本概念和使用方法。迭代器作为STL中访问容器元素的通用工具,可分为输入、输出、前向、双向和随机访问等五种类型,各具不同功能。文章通过代码示例展示了迭代器的遍历、排序、查找等操作,并警示了迭代器失效的风险。此外,还介绍了反向迭代器和输入流迭代器等特殊用法。掌握迭代器能有效提升STL容器和算法的使用效率,是C++编程的重要技能。

m0_66709139的博客 822

Cpp::反向迭代器(38)

本篇文章所有源代码公开Hello,我又回来讲解C++了!,这次讲的是反向迭代器!!反向迭代器的++就是正向迭代器的–,反向迭代器的–就是正向迭代器的++,因此反向迭代器的实现可以借助正向迭代器,即:反向迭代器内部可以包含一个正向迭代器,对正向迭代器的接口进行包装即可。不算太难,但是复用、适配等思想还是很有意义的。

tan180°的博客 1042

【C++ 迭代器 】C++ 迭代器标签的使用场景

在这一章中,我们将探讨迭代器标签在 C++ 中的应用,特别是在现代 C++ 版本中如何使用迭代器标签来优化代码和提高代码的可读性。我们将从迭代器标签的基本概念开始,然后逐步深入探讨它们在不同情境下的应用。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 2205

C++ 迭代器

头文件迭代器类通常在相应的容器头文件中定义。的迭代器在<vector>头文件中。std::list的迭代器在<list>头文件中。std::set的迭代器在<set>头文件中。迭代器访问每种容器(除了反向迭代器)都提供了begin()和end()方法,返回对应的迭代器对象。begin()返回指向容器首元素的迭代器,end()返回指向容器尾后一个位置的迭代器。这使得用户能够轻松使用迭代器进行遍历。反向迭代器本身并不包含 begin() 和 end() 方法。

无限大的博客 1556

C++:迭代器

讲解C++的迭代器概念及基础用法

博客网站 https://async-area.com 2716

C++的五类迭代器

文章目录1、输入迭代器:可以读取序列中的元素2、输出迭代器:可以看成输入迭代器的补集——只写而不读取元素3、前向迭代器:可以读写元素4、双向迭代器:可以正向/反向读写序列中的元素5、随机访问迭代器:提供在常数时间内访问任意元素的能力 前言: 根据算法所要求迭代器的操作,可将迭代器分为5个迭代器类别。 类似容器,迭代器也定义了一组公共操作。一些操作所有迭代器都支持,另外一些只有特定类别的迭代器才支...

algsup 3302

c++ 迭代器

​ 迭代器是C++ STL的核心组件,充当容器与算法之间的桥梁。它提供了一种 通用且安全的方式来遍历容器元素 ,隐藏了容器的具体实现细节1。通过模拟指针的行为,迭代器实现了对容器元素的灵活访问和操作,使程序员能够在不了解容器内部结构的情况下高效地处理各种数据结构2。这种设计不仅提高了代码的可移植性和可维护性,还增强了C++程序的整体性能和可靠性。

2401_86544677的博客 1029

C++——迭代器

C++中的迭代器是一种对象,可以用于遍历容器类型(如vector、list等)中的元素。C++中有多种类型的迭代器,包括正向迭代器、反向迭代器、常量迭代器等。其中,container表示容器类型(如vector、list等),iterator表示迭代器类型,it表示定义的迭代器对象名称。- 常量反向迭代器(const_reverse_iterator):可以访问被定义为const的容器中的元素,但不能修改它们。C++中有多种迭代器类型,如正向迭代器、反向迭代器、常量迭代器等。

m0_48748418的博客 1400

C++ STL 迭代器Iterator、五种迭代器类别

前言 最近在看《STL源码剖析》,并且也跟着在实现algorithm.h这个头文件。里面的算法基本都是对迭代器所指向的容器区间内的元素做操作,因此这些算法的泛型模板参数基本都有迭代器类型。针对不同的算法,对迭代器类型的要求也不同,本篇博客我就简单介绍一下C++中的五种迭代器类别。 五种迭代器类别的关系 首先介绍五种迭代器类别: 输入迭代器input iterator 输出迭代器output iterator 前向迭代器forward iterator 双向迭代器bidirectional iterator

Johnsonjjj的博客 7160
上一篇: c++ vector 容器
下一篇: Qt HTTP请求使用Basic认证
不是很大锅
博客等级 码龄10年 34粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是很大锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值