STL迭代器
2024-08-30 10:36:24
大部分ACM中使用的都是C/C++语言,但是说到C语言和C++语言的区别,却不知道。
- C++语言用于竞赛真的是非常方便的,里面有很多函数还有STL这个好东西,比C语言方便,比其他语言好理解。
- 在C语言中,有指针这个东西,当然在C++中也能用指针,但是其实是不建议在C++中继续使用C语言的指针,于是C++有了引用传参这个东西来替代指针。对C++容器的访问,也就出现了迭代器这么一个东西。
- 迭代器和指针类似,但迭代器更加丰富。
迭代器的操作运算符
和指针类似,有以下操作:
*iter; //返回迭代器iter所指元素的引用
iter->men; //解引用iter并获得该元素的名为men的成员,相当于(*iter).men
++iter; //令iter指示容器的下一个元素
--iter; //令iter指示容器的上一个元素
iter1==iter2; // 如果两个迭代器指示的是同一个元素或者它指向同一个容器的尾后迭代器,则相等.
- 除外迭代器也支持下面几种操作:
iter+n; //迭代器加上一个整数值仍得到一个迭代器,迭代器指示的新位置向前移动了,指示可能是容器的一个元素或者是尾部的下一个位置
iter-n; //相反,迭代器指示的位置向后移动了,指示可能是容器的一个元素或者是尾部的下一个位置
iter1+=n; //等价于iter1+n
iter1-=n; //等价于iter2-n
iter1-iter2; //两个迭代器的距离,
>,<,>=,<= //位置离begin近的较小
- 但是得注意 ,后面这几种操作只有随机迭代器才支持,具体迭代器的分类下面会讲到。
迭代器的类型
迭代器一般使用iterator 和 const_iterator两种类型,区别应该看名称也能猜出来,后者只能进行读取操作,而不能修改值。
- c++11中,引入了两个新函数,cbegin和cend,这两个函数能直接返回 const_iterator 类型的迭代器,方便操作。
迭代器的分类
- 每种容器都有自己的迭代器类型。
- 只有Vector 和 Deque 的迭代器类别为随机访问,而其他map,set,list都只支持双向迭代器。
- 二者的区别就是随机迭代器支持+=n(n为常数)的运算,而双向迭代器只能自增自减。(当然你可以自己重载双向迭代器的+=操作)
迭代器的使用
- 对于每种容器,使用迭代器方法是一样的,例如对vector而言:
vector<int>::itertor it; //定义了一个随机迭代器
vector<int>::const_itertor iter; //定义了一个只读的随机迭代器
- 对于其他容器使用方法同上,特别的是,C++的String类型也支持随机迭代器的形式。
容器中的大部分函数以及操作,都是基于迭代器完成的。所以学会使用迭代器是学习C++的一个必经之路。
值得一提的是,既然使用C++语言,就要完全利用C++语言的方便性,而不是仅仅只使用一个cin或者cout。
最新文章
- Promise的前世今生和妙用技巧
- 使用FileSystemWatcher监控文件夹及文件
- angularjs之插件ngRoute和ngAnimate
- Android入门(十六)调用摄像头相册
- [转]SpringMVC+Hibernate+Spring 简单的一个整合实例
- 将IIS 7,IIS 8运行在32位
- Java IO流体系中常用的流分类
- 见怪不怪的typedef
- 【转】linux下awk内置函数的使用(split/substr/length)
- SQL Server索引 - 索引(物化)视图 <;第九篇>;
- 创建了一个基于最短路径规划geoserver的wms服务
- web-worker计数器,根据输入时间统计次数
- c# 接口相同方法申明使用
- 一个spring mvc 需要用到到文件
- docker 安装 fastdfs
- WS_TABSTOP 与 BS_DEFPUSHBUTTON 第一次使有
- EF优化之启动预热
- redis恢复(aof)
- 课后选做题:MyOD
- A1058. A+B in Hogwarts
热门文章
- JavaScript 数组、字符串、Map、Set 方法整理
- java后端_百度二面
- Unity进阶之ET网络游戏开发框架 05-搭建自己的第一个Scene
- Nacos(三):Nacos与OpenFeign的对接使用
- .Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy
- 关于 .Net Core runtimeconfig 文件说明
- net必问的面试题系列之基本概念和语法
- 消息中间件——RabbitMQ(八)高级特性全在这里!(下)
- 《Head First 设计模式》笔记
- CSS 之Grid网格大致知识梳理1