STL迭代器
大部分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。
STL迭代器的更多相关文章
- STL迭代器笔记
STL迭代器简介 标准模板库(The Standard Template Library, STL)定义了五种迭代器.下面的图表画出了这几种: input output \ ...
- 一步一步的理解C++STL迭代器
一步一步的理解C++STL迭代器 "指针"对全部C/C++的程序猿来说,一点都不陌生. 在接触到C语言中的malloc函数和C++中的new函数后.我们也知道这两个函数返回的都是一 ...
- STL 迭代器 iterator const
STL迭代器很多时候可以当成指针来使用. 但是指针一般可以用const来控制访问. 那迭代器呢. #include <iostream> #include <vector> u ...
- STL迭代器的使用、正向、逆向输出双向链表中的所有元素
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- 【STL 源码剖析】浅谈 STL 迭代器与 traits 编程技法
大家好,我是小贺. 点赞再看,养成习惯 文章每周持续更新,可以微信搜索「herongwei」第一时间阅读和催更,本文 GitHub : https://github.com/rongweihe/Mor ...
- STL迭代器之一:偏特化
在stl的算法中运用容器的迭代器时,很可能经常会用到迭代器相应型别(例如迭代器所指物的型别),假设算法中有必要声明一个变量,以"迭代器所指对象的型别"为类型,如何是好,例如我们写一 ...
- C++ STL 迭代器失效问题
之前看<C++ Primier>的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究.今天写程序的时候遇到了这个问题. 1 莫名其妙的Erase 最初我 ...
- stl 迭代器(了解)
STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的. 对应于它们所支持的操作,共有五种 iterators ...
- stl迭代器原理
具体实现肯定不如书上讲的清楚了,这里只是根据侯捷书上的讲解,自己建立一条思路以及形成一些相关的概念 迭代器也可被称作智能指针,用于遍历容器内的元素,stl每个容器都实现了自己的iterator,ite ...
- STL——迭代器的概念
迭代器是一种抽象的设计概念,现实程序语言中并没有直接对应于这个概念的实物. 1 迭代器设计思维——STL关键所在 不论是泛型思维或STL的实际运用,迭代器都扮演这重要的角色.STL的中心思想在于:将数 ...
随机推荐
- 【目标检测】RCNN算法详解
网址: 1. https://blog.csdn.net/zijin0802034/article/details/77685438 (box regression 边框回归) 2. https:// ...
- 使用coding和hexo快速搭建博客
欢迎访问我的个人博客皮皮猪:http://www.zhsh666.xyz 今天教大家怎么用hexo快速搭建自己的博客.我不是专业人士,不懂前端知识,所以我十分讨厌那些专业术语,讲了一大堆,对于技术小白 ...
- Spring依赖注入浅析
1. 概念理解 依赖注入 谁注入谁? 依赖对象注入IoC容器. 控制反转 谁控制谁?控制什么? IoC容器控制对象,控制依赖对象的创建与注入. 为什么称为反转?创建.注入对象的控制权由程序员的主观意愿 ...
- 重温Android和Fragment生命周期
重温下Android和Fragment生命周期,理解生命周期方法的作用,什么时候调用,可以做一些什么操作. 1.Android生命周期 1.1 生命周期图 1.2 生命周期函数说明 onCreate: ...
- Asp.net MVC 集成AD域认证
1.首先WebApi 应用下Web.config要配置域认证服务器节点,如下 <!--LDAP地址 用于项目AD系统账号密码验证--> <!--0:关闭域认证:1:开启域认证--&g ...
- Java开发必备技能
--------转载自B站up主 codeSheep 基础知识 编程语言:Java Python C 基本算法 基本网络知识:TCP/IP HTTP/HTTPS 基本的设计模式 工具方面 操作系统: ...
- Jedis操作Redis--SortedSet类型
/** * SortedSet(有序集合) * ZADD,ZCARD,ZCOUNT,ZINCRBY,ZRANGE,ZRANGEBYSCORE,ZRANK,ZREM,ZREMRANGEBYRANK,ZR ...
- C#开发BIMFACE系列19 服务端API之获取模型数据4:获取多个构件的共同属性
系列目录 [已更新最新开发文章,点击查看详细] 在前几篇博客中介绍了一个三维文件/模型包含多个构建,每个构建又是由多种材质组成,每个构建都有很多属性.不同的构建也有可能包含相同的属性. 上图中 ...
- CodeForces 507E Breaking Good 2维权重dij
Breaking Good 题解: 2维权重dij, 先距离最短, 后改变最小. 在这个题中, 如果要改变最小, 则让更多的可用边放进来. 然后可以用pre存下关键边. 代码: ...
- CodeForces 758 D Ability To Convert
Ability To Convert 题意:给你一个n进制的60位的数,但是由于Alexander只会写0->9,所以他就会用10来表示十而不是A(假设进制>10); 题解:模拟就好了,先 ...