迭代器

这是个啥?

string对象或vector对象可以通过下标访问每一个元素,迭代器也具有同样的效果。那又有什么不同呢?事实上并不是所有的容器到可以使用下标访问每一个元素,即在容器上迭代器更具普适性。string类支持迭代器,同vector一样。

Use

有的迭代器类型是有返回值的,可是事实上我们不用管它。使用auto就可以愉快地迭代。

auto a = v.begin();
auto e = v.end(); //只读不写
auto a = v.cbegin();
auto e = v.cend();

值得注意的是,end是指向容器“尾元素的下一个元素”,称为尾后迭代器,简称尾迭代器。

标准迭代器运算符

它类似于指针,但不会使用取地址符。

运算符 含义
*iter return &
iter -> men =(*iter).men,获取men成员
++iter 下一个元素
--iter 上一个元素
iter1 == iter2 是否指向同一个元素或尾后迭代器
iter1 != iter2

注:(*iter).men,称为解引用。

小试牛刀

string s("hello world");
if(s.begin()!=s.end()){ //not null
auto it = s.begin();
*it='a'; //change value
}

来个循环

for(auto it = s.cbegin();it != s.cend();++it)
{
cout<<*it;
}
cout<<endl;

注:C++习惯使用"!=",其原因是这种编程风格在标准库中所有容器均有效。所有标准库容器都定义"=="和"!=",而不是"<"。

迭代器运算

运算 含义
iter + n 前移n个位置
iter - n 后移n个位置
iter += n 前移n个位置,赋值iter
iter -= n 后移n个位置,赋值iter
iter1 - iter2 距离
< > >= <= 位置关系

注意:n为unsigned int 或者int,不影响计算。

auto mi = vi.begin() + vi.size() / 2	//计算中间的迭代器

来个binary_search()

auto beg = text.begin(),end = text.end();
auto mid = text.begin() + (end -beg) >> 1;
while(mid != end && *mid! = target)
{
if(target < *mid)
end = mid;
else
beg= mid+1;
mid = beg + (end - beg)/2;
}

C++ 初读迭代器的更多相关文章

  1. TensorFlow 源代码初读感受

    把自己微博发的文章:http://www.weibo.com/1804230372/En7PdlgLb?from=page_1005051804230372_profile&wvr=6& ...

  2. C++ 初读vector

    vector 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container).跟任意其它类型容器一样,它能够存放各种类型的对象. Character 高效 C++标准要 ...

  3. 初读"Thinking in Java"读书笔记之第五章 --- 初始化与清理

    用构造器确保初始化 构造器可以确保每个对象都会得到初始化,Java毁在创建对象时自动调用构造器. 构造器采用与类名相同的名称,因此并不适合"每个方法首字母小写的风格". 构造器默认 ...

  4. D1——初读《Head First Java》

    今天随便看了点<Head First Java>,发觉这本书的风格真是有趣.打算先把这本书踏踏实实的看了.学习切忌好高骛远.心浮气躁,尤其入门基础阶段更应该踏踏实实地学习知识.下面随便谈谈 ...

  5. JavaScript权威指南(第六版) 初读笔记

    JavaScript的5种原始类型:undefined.null.布尔值.数字和字符串. JavaScript中两个非常重要的数据类型是对象和数组. 通过方括号定义数组元素和通过花括号定义对象属性名和 ...

  6. 201771030106-葛佳诚 实验一 软件工程准备-<初读《构建之法——现代软件工程》有问>

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 作业要求链接 https://www.cnblogs.com/nwnu-da ...

  7. [初读笔记] Cloud Migration Research: A Systematic Review (TCC, 2013)

    Pooyan Jamshidi, Aakash Ahmad, Claus Pahl, "Cloud Migration Research: A Systematic Review," ...

  8. xml初读

    形式良好的 XML 文档 “形式良好”或“结构良好”的 XML 文档拥有正确的语法. “形式良好”(Well Formed)的 XML 文档会遵守前几章介绍过的 XML 语法规则: XML 文档必须有 ...

  9. javascript对象初读

    <script type="text/javascript"> function baseClass() { this.showMsg = function() { a ...

随机推荐

  1. 010-3 Socket协议ProtocolType

    ProtocolType成员 成员名称 说明 Ggp 网关到网关协议. Icmp Internet 控制消息协议. IcmpV6 IPv6 的 Internet 控制消息协议. Idp Interne ...

  2. Java发布webservice应用并发送SOAP请求调用

    webservice框架有很多,比如axis.axis2.cxf.xFire等等,做服务端和做客户端都可行,个人感觉使用这些框架的好处是减少了对于接口信息的解析,最主要的是减少了对于传递于网络中XML ...

  3. 字符串join函数跟+号测试

    字符串join函数for循环+区别: 原因是这样的,字符串是不可变对象,当用操作符+连接字符串的时候,每执行一次+都会申请一块新的内存,然后复制上一个+操作的结果和本次操作的右操作符到这块内存空间,因 ...

  4. 如何使用门罗币远程节点remote node?

    当使用门罗币钱包的时候,都需要启动monerod,用来同步门罗币区块. 但是因为区块体积目前已经超过40G了, 所以需要花费很多天时间才能把数据同步完. 这对于使用门罗币非常的不方便. 远程节点rem ...

  5. HDU-1709 The Balance(生成函数)

    题意 给$n$个数,有哪些属于$1$到$n$个数字总和$sum$的数是通过该集合任意子集之间的加减运算无法得到的. 思路 对每个数构造$x^{-a[i]}+1+x^{a[i]}$,为了避免负幂次可以将 ...

  6. 工作经验-Oracle定时数据备份

    Oracle database 11g express edition http://www.oracle.com/technetwork/cn/products/express-edition/do ...

  7. vue.js学习系列-第一篇

    VUE系列一 简介    vue是一个兴起的前端js库,是一个精简的MVVM.从技术角度讲,Vue.js专注于 MVVM 模型的 ViewModel 层.它通过双向数据绑定把 View 层和 Mode ...

  8. 2018-2019-2 网络对抗技术 20165337 Exp1 PC平台逆向破解(BOF实验)

    实验内容 直接修改程序,跳转到getShell函数. 使用BOF攻击,覆盖返回地址,触发getShell函数. 注入一个自己的shellcode并运行. 任务一:直接修改程序,跳转到getShell函 ...

  9. python numpy 间的的数据变算公式

    import numpy as np a = np.arange(100) print(np.sum(a))#求和 print(np.mean(a))#平均值 print(np.max(a))#最大值 ...

  10. python3列表

    Python3 列表 list python的矩阵 python中矩阵可以用双层列表表示 Python列表脚本操作符 len([1, 2, 3]) 3 长度 [1, 2, 3] + [4, 5, 6] ...