C++ 初读迭代器
迭代器
这是个啥?
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++ 初读迭代器的更多相关文章
- TensorFlow 源代码初读感受
把自己微博发的文章:http://www.weibo.com/1804230372/En7PdlgLb?from=page_1005051804230372_profile&wvr=6& ...
- C++ 初读vector
vector 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container).跟任意其它类型容器一样,它能够存放各种类型的对象. Character 高效 C++标准要 ...
- 初读"Thinking in Java"读书笔记之第五章 --- 初始化与清理
用构造器确保初始化 构造器可以确保每个对象都会得到初始化,Java毁在创建对象时自动调用构造器. 构造器采用与类名相同的名称,因此并不适合"每个方法首字母小写的风格". 构造器默认 ...
- D1——初读《Head First Java》
今天随便看了点<Head First Java>,发觉这本书的风格真是有趣.打算先把这本书踏踏实实的看了.学习切忌好高骛远.心浮气躁,尤其入门基础阶段更应该踏踏实实地学习知识.下面随便谈谈 ...
- JavaScript权威指南(第六版) 初读笔记
JavaScript的5种原始类型:undefined.null.布尔值.数字和字符串. JavaScript中两个非常重要的数据类型是对象和数组. 通过方括号定义数组元素和通过花括号定义对象属性名和 ...
- 201771030106-葛佳诚 实验一 软件工程准备-<初读《构建之法——现代软件工程》有问>
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 作业要求链接 https://www.cnblogs.com/nwnu-da ...
- [初读笔记] Cloud Migration Research: A Systematic Review (TCC, 2013)
Pooyan Jamshidi, Aakash Ahmad, Claus Pahl, "Cloud Migration Research: A Systematic Review," ...
- xml初读
形式良好的 XML 文档 “形式良好”或“结构良好”的 XML 文档拥有正确的语法. “形式良好”(Well Formed)的 XML 文档会遵守前几章介绍过的 XML 语法规则: XML 文档必须有 ...
- javascript对象初读
<script type="text/javascript"> function baseClass() { this.showMsg = function() { a ...
随机推荐
- 《Java》第五周学习总结20175301
https://gitee.com/ShengHuoZaiDaXue/20175301.git 本周我学习了第六章的内容接口 重要内容有 理解接口 接口参数 面向接口编程 abstract类与接口的比 ...
- C++编译/运行过程中产生的各种文件
参考:https://blog.csdn.net/weixin_39609623/article/details/82348576 Windows中的obj,lib,dll,exe文件 lib是和dl ...
- Redis的安装与常用配置说明
1.redis安装步骤 1).下载,上传到Linux服务器,并解压 2).预编译(实际上是检查编译环境的过程) 进入目录: cd /opt/soft/redis-3.2.9/deps/jemall ...
- spring基于XML的声明式事务控制
<?xml version="1.0" encoding="utf-8" ?><beans xmlns="http://www.sp ...
- sql报错注入:extractvalue、updatexml报错原理
报错注入:extractvalue.updatexml报错原理 MySQL 5.1.5版本中添加了对XML文档进行查询和修改的两个函数:extractvalue.updatexml 名称 描述 Ext ...
- [系统集成] RT(Request Tracker)执行自定义脚本及发送微信、短信的实现方法
RT(Request Tracker)是一个基于 Perl 语言的开源状态跟踪和工作流系统,支持审批.权限管理等功能,中文化支持的也不错,可以作为企业的流程审批系统使用.可惜的是,该系统在国内使用的不 ...
- EntityFramework6之原生SQL
原文:https://www.cnblogs.com/wujingtao/p/5412329.html 用EF执行SQL又比ADO.NET方便,特别是在执行查询语句的时候,EF会把查询到的数据自动保存 ...
- 【easy】Number of Segments in a String 字符串中的分段数量
以空格为分隔符,判断一个string可以被分成几部分. 注意几种情况:(1)全都是空格 (2)空字符串(3)结尾有空格 思路: 只要统计出单词的数量即可.那么我们的做法是遍历字符串,遇到空格直接跳过, ...
- Kubernetes的十大使用技巧
1. bash针对kubectl命令的自动补充这可能是在使用Kubernetes过程中最容易做的事,但它也是其中一个最有用的.要添加自动补充功能,如果使用bash,只需执行以下命令: echo &qu ...
- javascript中new Date()存在的兼容性问题
问题:通过new Date()创建的时间对象在Chrome能正常工作,但在IE浏览器却显示NaN 代码: var time = new Date(date + ' 00:00:00'); //NaN ...