原创 【博客大赛】《C++ Primer》学习笔记(九)迭代器

2016-3-15 15:47 948 20 22 分类: MCU/ 嵌入式 文集: Qt和Cpp
访问string或者vector的元素,下标是一种常见的方法。
更通用的方法是迭代器(iterators)。

库中的所有容器都支持迭代器,但只有它们之中的少数支持下标。
string并不是容器,尽管它的很多操作和容器很像。
string也支持迭代器。

迭代器类似指针。
迭代器和指针的使用方法不一样。

获取第一个元素和最后一个元素:
auto b = v.begin(), e = v.end();

v.begin()获取到的是第一个元素;
v.end()获取到的元素是最后一个后面的那个,它实际上是不存在的。

迭代器可进行的操作很少:
*iter       //返回元素的引用
iter->mem   //取元素的mem成员,相当于(*item).mem
++iter      //迭代器自增
--iter      //迭代器自减
iter1 == iter2  //判断两个迭代器是否相等
iter1 != iter2  //判断两个迭代器是否不等

在C++的for循环里面,我们经常使用“!=”来做条件判断,而不是“<”。
这是因为很多迭代器并没有提供“<”操作,为了通用性,就都使用“!=”吧。

----------------
迭代器的类型:
vector<int>::iterator it;
string::iterator it2;
vector<int>::const_iterator it3;
string::const_iterator it4;

当不能使用auto获取迭代器类型时,可以精确的指定它。
使用const_iterator意味着元素可读但不可修改。
const类型的string或容器,只能使用const_iterator做迭代。

----------------
vector<int> v;
const vector<int> cv;
auto it1 = v.begin();
auto it2 = cv.begin();

如果vector是nonconst的,则iterator也是nonconst的;
如果vector是const的,则iterator也是const的。
要是我们使得nonconst的vector返回const的iterator呢?
auto it3 = v.cbegin();
auto it4 = v.cend();

两个interator之差的数据类型是difference_type,string和vector都定义了它。
size_type是无符号的数,difference_type是有符号的数。

对iterator进行操作的时候,时刻记住它的值不可超过容器或string的范围!!!
任何时刻都不能!!!

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

DiracFatCat 2016-3-16 23:12

还是学得太慢了,没有二十出头时的冲劲了,哈哈~

用户595347 2016-3-16 07:47

更新忒快了
相关推荐阅读
DiracFatCat 2018-09-05 12:14
【博客大赛】卡尔曼滤波学习笔记(11)从位置估计速度
卡尔曼滤波器,不仅仅是一个低通滤波器,否则也不会持续发展50年。 示例:桑先生需要测试高速列车的性能。测试的目的是判断列车在直线上能否保持80m/s的速度。速度和位置每0.1秒测量一次,但是由于...
DiracFatCat 2018-08-31 19:32
【博客大赛】卡尔曼滤波学习笔记(10)一个简单的示例
《Kalman Filtering: Theory and Practice Using MATLAB》第三章,看不懂,暂时略过。《Kalman Filtering: Theory and Pract...
DiracFatCat 2018-07-19 15:09
对sed命令的练习
sed是流编辑器。它每次处理一个输入,因此很有效率。官方手册:https://www.gnu.org/software/sed/manual/sed.html学习Linux命令,当然要阅读官方手册,所...
DiracFatCat 2018-06-19 15:10
【博客大赛】卡尔曼滤波学习笔记(八)可观测性和可控制性 ...
可观测性是指,在给定模型的情况下,动力学系统的状态是否由它的输入输出唯一确定。可观测性是系统模型的特征。如果传感器矩阵H是可逆的,则本系统可观测,因为有:如果传感器矩阵H某些时候是不可逆的,则本系统仍...
DiracFatCat 2018-06-19 10:56
【博客大赛】卡尔曼滤波学习笔记(七)Z变换
如果我们仅仅对离散线性系统感兴趣,那么就使用下面这个表达式:如果u是常量,那么可以写成:为了简化表达式,我们可以将上面写成:离散线性时不变系统的Φ求解,可以使用Z变换。(* 由于本人已经忘记了Z变换的...
DiracFatCat 2018-06-19 10:54
【博客大赛】卡尔曼滤波学习笔记(六)拉普拉斯变换
对于线性时变/时不变系统,求解Φ(t)有多种方式,拉普拉斯变换是其中一种。(* 由于本人已经忘记了拉普拉斯变换的内容,因此本节待续。)...
EE直播间
更多
我要评论
2
20
关闭 站长推荐上一条 /3 下一条