《c++ primer, 5E》

第94页到第99页,笔记:

1、迭代器(iterator):一种比下标访问更通用的访问容器中元素的机制

(并不是所有标准库容器都支持下标访问,<运算符)

我们认定某个类型是迭代器,当且仅当它支持一套操作,

这套操作使得我们能访问容器的元素或者从某个元素移动到另外一个元素。

2、有迭代器的类型都拥有名为begin和end成员

3、一般来说,我们不在意迭代器的准确类型到底是什么

4、迭代器支持的一些运算。(与指针类似,例如iter->mem:解引用iter并获取该元素

名为mem的成员,等价于(*iter).mem)

5、养成使用迭代器和!=的习惯(而非<运算符),就不用太在意用的到底是哪种容器类型。

6、如果对象只需读操作而无须写操作的话最好使用常量类型(比如 const_iterator)。可以通过cbegin和cend返回该类型迭代器。

7、vector对象的一个限制:任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。

8、小结:重点掌握利用迭代器遍历元素的方法,结合解引用和成员访问操作(*it以及it->)

课后练习:

练习3.21

int:

#include<iostream>
using std::cout;
using std::endl;
#include<vector>
using std::vector;
int main()
{
// 定义一个vector对象
vector<int> v5( ,);
// 输出vector对象的容量和具体内容
int size = v5.end() - v5.begin();
cout << size << endl;
// 使用迭代器和!=遍历元素
for(auto it = v5.begin(); it != v5.end(); ++it){
cout << *it << endl;
}
return ;
}

string:

#include<iostream>
using std::cout;
using std::endl;
#include<vector>
using std::vector;
#include<string>
using std::string;
int main()
{
// 定义一个vector对象
vector<string> v5( , "hi");
// 输出vector对象的容量和具体内容
int size = v5.end() - v5.begin();
cout << size << endl;
// 使用迭代器和!=遍历元素
for(auto it = v5.begin(); it != v5.end(); ++it){
cout << *it << endl;
}
return ;
}

练习3.22

#include<iostream>
using std::cout;
using std::endl;
#include<vector>
using std::vector;
#include<string>
using std::string;
int main()
{
// 定义一个字符串向量
vector<string> text{"Hello", "", "world!"};
// 把text的第一段全都改成大写形式,然后再输出它
for(auto it = text.begin();
it != text.end() && !(*it).empty(); ++it){
for(auto &ch: *it){
ch = toupper(ch);
}
cout << *it << endl;
}
return ;
}

练习3.23

#include<iostream>
using std::cout;
using std::endl;
#include<vector>
using std::vector;
#include<string>
using std::string;
int main()
{
// 创建一个含有10个整数的vector对象
vector<int> ivec( , );
// 使用迭代器将所有元素的值都变成原来的两倍。输出vector对象的内容
for(auto it = ivec.begin(); it != ivec.end(); ++it){
*it *= ;
cout << *it << endl;
}
return ;
}

遇到的问题:

1、const_iterator哪里和常量指针差不多了?

c++第十五天的更多相关文章

  1. 我的MYSQL学习心得(十五) 日志

    我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  2. Bootstrap <基础二十五>警告(Alerts)

    警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...

  3. Bootstrap<基础十五> 输入框组

    Bootstrap 支持的另一个特性,输入框组.输入框组扩展自 表单控件.使用输入框组,可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮. 通过向输入域添加前缀和后缀的内容,您可以向用户输 ...

  4. 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)

    解剖SQLSERVER 第十五篇  SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...

  5. Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密

    前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...

  6. 十五个常用的jquery代码段【转】

    好的文章顶一个 回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: 1 // Back to top 2 $('a.t ...

  7. 十五个常用的jquery代码段

    十五个常用的jquery代码段 回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: 1 // Back to top ...

  8. 淘宝(阿里百川)手机客户端开发日记第十五篇 JSON解析(四)

    解析一个从淘宝传递的JSON (大家如有兴趣可以测试下):{ "tae_item_detail_get_response": { "data": { " ...

  9. [COJ0985]WZJ的数据结构(负十五)

    [COJ0985]WZJ的数据结构(负十五) 试题描述 CHX有一个问题想问问大家.给你一个长度为N的数列A,请你找到两个位置L,R,使得A[L].A[L+1].…….A[R]中没有重复的数,输出R- ...

  10. 无废话ExtJs 入门教程十五[员工信息表Demo:AddUser]

    无废话ExtJs 入门教程十五[员工信息表Demo:AddUser] extjs技术交流,欢迎加群(201926085) 前面我们共介绍过10种表单组件,这些组件是我们在开发过程中最经常用到的,所以一 ...

随机推荐

  1. CentOS7.5安装Tomcat8

    一.tomcat的简介 这是Apache Tomcat Servlet / JSP容器的文档包的顶级入口点 .的Apache Tomcat 8.0版实现了Servlet 3.1和JavaServer ...

  2. php里面向指定的页面提交数据

    在jquery里用 load post 等等,无法得到我想要的结果!于是突然-----这几天想的东西都白想了,现在只好这样了 现在想在php里面向指定的页面提交数据,应该有,还可以有返回值 于是找了这 ...

  3. Ubuntu16.04下编译安装及运行单目ORBSLAM2

    官网有源代码和配置教程,地址是 https://github.com/raulmur/ORB_SLAM2 1 安装必要工具 首先,有两个工具是需要提前安装的.即cmake和Git. sudo apt- ...

  4. 在python中读写matlab文件

    scipy.io提供有两个函数loadmat和savemat,用来读取和存储mat的数据文件 import scipy.io as sio 还有一些其他常用的模块 import numpy as np ...

  5. Zhu and 772002---hdu5833(高斯消元解求异或方程组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5833 题意:给n个数,选择一些数字乘积为平方数的选择方案数. 分析:每一个数字分解质因数.比如4, 6 ...

  6. Catch That Cow--POJ3278

    Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...

  7. Sql Server索引的原理与应用

    SqlServer索引的原理与应用 转自:http://www.cnblogs.com/knowledgesea/p/3672099.html   索引的概念 索引的用途:我们对数据查询及处理速度已成 ...

  8. 【剑指offer】用两个栈实现队列

    一.题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 二.思路: 两个栈A,B,A负责进栈,B负责出栈,进栈很容易,A中添加即可,出栈需要从B里出,所以要先 ...

  9. Spark SQL初始化和创建DataFrame的几种方式

    一.前述       1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...

  10. 关于LUA中的随机数问题

    也许很多人会奇怪为什么使用LUA的时候,第一个随机数总是固定,而且常常是最小的那个值,下面我就简要的说明一下吧,说得不好,还请谅解.我现在使用的4.0版本的LUA,看的代码是5.0的,呵呵 LUA4. ...