STL学习之迭代器

迭代器提供了顺序访问容器中每个元素的方法。迭代器可以使用"++"运算符获得下一个元素的迭代器,可以使用" * "运算符访问当前迭代器所指向的元素。如果元素类型是结构体或类,还可以使用“ ->” 运算符直接访问该元素的一个成员。以下是个人在学习迭代器时获得得一些见解。

一、 输入流与输出流迭代器

输入流迭代器

输入流迭代器用来从一个输入流中连续地输入某种类型的数据,它是一个类模板,例如:
template <class T>istream_iterator<T>;
T是数据类型,需要满足两个条件:有默认构造函数、可以使用“>>“运算符输入。

注意:输入流迭代器只适用那些只需遍历一次的算法

输出流迭代器

输出流迭代器用来向一个输出流出流中连续输出某种类型的数据,他也是一个模板,例如:
template <class T>ostream_iterator<T>;
T是数据类型,需要满足两个条件:有默认构造函数、可以使用“<<“运算符输输出。

两种迭代器运用举例

//从标准输入读入几个实数,分别将他们的平方输出
#include<iostream>
#include<vector>
#include<iterator>
#include<functional>
#include<algorithm>
using namespace std;

//求平方的函数
double square(double x)
{
	return x * x;
}

int main()
{
	//从标准输入读入几个实数,分别输出他们的平方,输出之间用空格分开
	transform(istream_iterator<double>(cin), istream_iterator<double>(), ostream_iterator<int>(cout, " "), square);

	return 0;
}

二、 迭代器的分类

1、输入迭代器

定义:输入迭代器可以用来从序列中读取数据,但是不一定能够向其中输入数据。输入流迭代器支持对序列进行单向遍历。
除了迭代器通用功能外,它还具备:
(1)、p1==p2  两个输入迭代器可以用"=="比较是否相同
(2)、p1!=p2  两个输入迭代器可以用"=="比较是否不同
(3)、*p	   取得迭代器所指向元素的值
(4)、p1->m 	数据是结构体或类时,取得迭代器所指元素的值	

前面提到的输入流迭代器就是一种典型的输入迭代器
输入迭代器具有不确定性:p1= =p2不能保证 ++p1= =++p2,更不能确定*(p1++)= =*(p2++)

2、输出迭代器

	定义:输出迭代器可以用来向序列中写入数据,但是不一定能够从其中读出数据。输出流迭代器支持对序列进行单向遍历。
	除了迭代器通用功能外,它还具备:
	*p1 = t	向迭代器所指向位置写入一个元素,返回类型是不确定的

前面提到的输出流迭代器就是一种典型的输出迭代器
输迭代器具有不确定性:如果两次自增之间没有写入元素,或者两次连续使用"*p1=t"这样的语法写入元素而没有自增,这两种行为都是不确定的。

3、前向迭代器

前向迭代器既支持数据读入也支持写入数据。
前向迭代器支持支持对序列进行可重复的单向遍历。
前向迭代器去除了输入迭代器和输出迭代器的不确定性。

重点说一下,去掉不确定性之后意味着若p1 = = p2,则 ++p1 = = ++p2 一定成立

4、双向迭代器

双向迭代器除了前向迭代器的功能之外还支持反向移动,即支持自减,如 - - p1

5、随机访问迭代器

随机迭代器在双向迭代器的基础上,它又支持将迭代器向前或向后移动n个元素,因此随机访问迭代器的功能几乎和指针一样。
随机访问迭代器的一些功能:

(1)p1+=n	迭代器向前移动n个元素
(2)p1-=n	迭代器向后移动n个元素
(3)p1+n		获得指向迭代器p1前第n个元素的迭代器
(4)p1-n	    获得指向迭代器p1后第n个元素的迭代器
(5)p1[n] 	等价于*(p1+n)

以上是本人2020-6-29学习迭代器所得。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值