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的中心思想在于:将数 ...
随机推荐
- DFS-深度优先算法解决迷宫问题
/*main.cpp*/#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; int sr, sc ...
- ip地址、域名、DNS、URL的区别与联系
IP:每个连接到Internet上的主机都会分配一个IP地址,此ip是该计算机在互联网上的逻辑地址的唯一标识,计算机之间的访问就是通过IP地址来进行的.写法:十进制的形式,用“.”分开,叫做“点分十进 ...
- 微信小程序, 解析↵换行
获取到json中的数据,通过“\n”转义,此时我们需要通过正则表达式来替换一下 replace(/↵/g, '\n'); 在页面中可以这样 <text class="test-ti ...
- Python 基础 2-3 列表的反转与排序
引言 列表是按照特定格式排序而成的,有时候这种排序方式我们并不喜欢,我们希望它可以按照我们的方式来进行正序或者倒序排序,或其他的排序方式 反转与排序 比如说我这里有一组列表,里面存放的全部都是数值,但 ...
- LeetCode刷题 - (01)两数之和
题目描述 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...
- vscode同步插件 sync(gist,token)
网上很多同步教程,按照教程操作upload时一直报错:sync:invalid gist ID 查找问题很久才知道 gist和token是两个东西.下面重新梳理下: 一.下载安装插件 Setting ...
- nginx-springboot-vue前后端分离跨域配置
nginx-springboot-vue前后端分离跨域配置 引言 接着上篇--简单的springboot-vue前后端分离登录Session拦截的demo,其中跨域是通过springboot后端全局设 ...
- A-The power of Fibonacci_2019牛客暑期多校训练营(第九场)
题意 求\(\sum_0^n{Fb}_i^m \mod (1e9)\) 题解 模1e9时的斐波那契数列循环节太大,考虑把模数质因数分解成\(2^9\cdot5^9\),此时循环节变成768和78125 ...
- HDU- 6437.Videos 最“大”费用流 -化区间为点
参考和完全学习:http://www.cnblogs.com/xcantaloupe/p/9519617.html HDU-6437 题意: 有m场电影,电影分为两种,看一场电影可以得到对应的快乐值. ...
- Joyful HDU - 5245 概率问题
Sakura has a very magical tool to paint walls. One day, kAc asked Sakura to paint a wall that looks ...