C++模板进阶

前言

模板进阶也没有到一些特别的东西,就是讲比较偏的一些特性。
在这里我们先来讲一下反向迭代器。

反向迭代器

反向迭代器和正向迭代器的区别

严格来说没有大的区别。真正的区别在于++或者- -的方向不一样。
它是倒着走的。

在这里插入图片描述

如果是list, 以我们自己的思路实现我们会怎么做?
我们可能有这样一个思路,我们把正向迭代器拷贝一份出来,名字变一下,其他保持不变。
再把反向迭代器的++变成node =node->prev; 就是增加一个类的思路。
这样行不行呢?我们可以测试一下。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

我们再提供一个rbegin(), rend();
在这里插入图片描述

在这里插入图片描述

最后测试一下
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
好像还可以,就这么esay.但是还是太年轻太简单了。

我们普通人写的代码,还得看一下高手写的代码,在实践中进步

stl反向迭代器源码

我们看一下stl的源码。
它没有像我们前面一样实现一个类。

它的反向迭代器是这样实现的。
在这里插入图片描述

这怎么传了一个正向迭代器过去。
这是个类模板。

还得接着从源码中找。
用适配器。

发现stl极度的讨厌冗余重复的设计。

看源码。
也就是说你用一个正向迭代器就可以构造一个反向迭代器。
在这里插入图片描述

然后看这里++就是正向迭代器的- -, - -就是正向迭代器的+ +;

在这里插入图片描述

但是这里又有一个诡异的东西。
在这里插入图片描述
它的解引用没有取当前位置,它取了前一个位置。

正向和反向的区别来了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

看结构就已经知道为解引用是取前一个位置

反向迭代器模拟实现

现在的思路跟之前不一样了,还是写一个类,但是我现在是用一个正向迭代器取构造一个反向迭代器。
现在重点在于反向迭代器的++是正向迭代器的- -;

template<class Iterator>
struct ReverseIterator
{
   
	typedef ReverseIterator<Iterator> Self;
	Iterator _cur;

	ReverseIterator(Iterator it)
		
评论 67
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不居一格

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值