C++之迭代器

摘要:
迭代器概念迭代器用于访问字符串对象或向量对象的元素,类似于下标操作和指针=s。结束())//确保s不为空{autoit=s.begin();//它表示s的第一个字符*it=toupper(*it);}迭代器类型的开始和结束运算符与解引用和成员访问操作相结合,以解引用迭代器,从而获得迭代器指向的对象。automid=vi.begin()+vi。size()/2;//Vi.size()=10,那么如果//在Vi的前半部分处理元素时使用迭代器计算代码指针,这也是指向数组元素的迭代器指针,则中间点指向元素Vi[10]。它有更多的功能

迭代器的概念

迭代器是用来访问string对象或vector对象的元素的,类似于下标运算和指针。

其对象是容器中的元素或string对象中的字符;

使用迭代器可以访问某个元素,迭代器也能从一个元素移动到另外一个元素。

迭代器的使用

不同于指针,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员;

比如,这些类型拥有名为begin和end的成员,begin成员负责返回指向第一个元素(或第一个字符)的迭代器,end成员则负责返回指向容器“尾元素的下一个位置”的迭代器;

C++之迭代器第1张

如果迭代器为空,则begin和end返回的是同一个迭代器;

标准容器迭代器的运算符

C++之迭代器第2张

和指针类似,也能通过解引用迭代器来获取它所指向的元素,执行解引用的迭代器必须合法并确实指向着某个元素。

string  s("some String");
if (s.begin() !=s.end() )  //确保s非空
{
   auto it=s.begin(); //it 表示s的第一个字符
   *it=toupper(*it);
}

迭代器类型

 begin与end运算符

C++之迭代器第3张

C++之迭代器第4张

结合解引用与成员访问操作

 解引用迭代器可以获得迭代器所指向的对象(类似与指针)。例如:若it是Vector对象的迭代器,

检查其元素是否为空,只需检查it所指向的字符串是否为空;

(*it).empty();   // it->empty();

某些对vector对象的操作会使迭代器失效

但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素;

迭代器运算

 C++之迭代器第5张

迭代器的算术运算

可以令迭代器和一个整数值相加(或相减),其返回值是向前(或向后)移动了若干个位置的迭代器。

auto mid = vi.begin() + vi.size() / 2; //vi.size()=10,则mid指向元素是vi[10]
if(it<mid) //处理vi前半部分的元素

使用迭代器运算(二分搜索)

代码

C++之迭代器第6张

指针也是迭代器

指向数组元素的指针拥有更多功能

C++之迭代器第7张

C++之迭代器第8张

C++之迭代器第9张

免责声明:文章转载自《C++之迭代器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ADO.NET(内涵效率问题)IDEA创建maven项目很慢的问题解决方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Conservative GC (Part one)

[toc] 保守式GC 保守式GC(Conservative GC)指“不能识别指针和非指针的GC” 不明确的根 不明确的根(ambiguous roots),下面三类都可以作为根。事实上是不明确的根 寄存器 调用栈 全局变量空间 以栈为例:在调用栈中有调用帧(call frame),调用帧里面装着函数内的局部变量和参数值。不过局变量中如果有c语言里面...

Java 生成指定时间范围的随机时间、随机中文姓名、随机字符姓名、随机数

解决问题: Java生成指定时间范围的随机时间? Java生成随机中文姓名? Java生成随机字符姓名? Java生成随机数? 代码: import java.io.UnsupportedEncodingException; import java.text.ParseException; import java.text.SimpleDateFormat...

SQLITE3 使用总结(直接使用C函数)

转载网址:http://blog.chinaunix.net/uid-8447633-id-3321394.html 前序: Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记。 这里要注明,我是一个跨平台专注者,并不喜欢只用 window...

dev -c++ 快捷键

转自:http://blog.csdn.net/abcjennifer/article/details/7259222 F8:开始调试 F7:进一步执行当前行,并跳到下一行 F4:添加查看 ctrl + F7 跳到下一断点, shift + F4 跳到光标所在行,并在该行设置断点 用鼠标选择源文件中的变量名,然后按 F4 也可以查看变量的值,该变量会出现...

Windows核心编程句柄和伪句柄 CHRIS

GetCurrentProcess(), DuplicateHandle() Window中为什么会有句柄的概念: 从Visual C++的头文件来看,HANDLE被typedef为void的指针,那是指向未确定数据结构的指针:typedef void* HANDLE;但是这并不说明任何问题,因为句柄远远不只是指向任意数据类型的指针。它是指向数据对象指针的...

遍历系统中加载的驱动程序以及通过设备对象指针获取设备对象名称

遍历系统中加载的驱动可以在R3层完成,通过几个未导出的函数:ZwOpenDirectoryObject、ZwQueryDirectoryObject,下面是具体的代码。 //在这定义些基本的数据结构,这些本身是在R0层用的比较多的 typedef struct _UNICODE_STRING { USHORT Length; USHOR...