C++ 补充 反向迭代器的实现

本文以代码实现为主、注释为辅,对list和vector的实现进行补充。介绍了反向迭代器的实现,通过封装正向迭代器得到;还阐述了list和vector的实现思路,分别类似双向循环链表和动态数组,只是用C++语法实现,不同点在于迭代器。

阅前提要:

本文主要是对list和vector的实现的补充,以代码实现为主,注释为辅,如果对vector,list底层实现感兴趣的可以自行阅读,代码量有点大,请大家耐心查看,对理解语言很有帮助(本文的实现方式并不是stl标准库中的实现,但大致的思路一样)

一、反向迭代器的实现

实现思想:反向迭代器和正向迭代器的不同点只在于++,--时迭代器的移动方向不同,其他的操作基本一样,我们可以对正向迭代器进行封装,从而得到反向迭代器,代码如下

namespace zxws
{
	// 适配器 -- 复用
    //这里细节关键在于模板参数可以传任何一个容器的正向迭代器,
    //即只要该容器的正向迭代器实现了,那么反向迭代器也就实现了(这就是模板的力量)
	template<class Iterator, class Ref, class Ptr>
	struct Reverse_iterator
	{
		Iterator _it;//这是正向迭代器

		typedef Reverse_iterator Self;
		Reverse_iterator(Iterator it)
			:_it(it)
		{}

		bool operator==(const Self& s)
		{
			return _it == s._it;
		}

		bool operator!=(const Self& s)
		{
			return _it != s._it;
		}

        //这个函数的实现和我们默认的rbegin()和rend()的位置有关
        //下面的代码实现是默认rbegin()是end()   rend()是begin()
		Ref operator*()
		{
			Iterator cur = _it;
			return *(--cur);
		}

		Ptr operator->()
		{
			return &(operator*());
		}

		Self& operator++()
		{
			--_it;
			return *this;
		}

		Self& operator--()
		{
			++_it;
			return *this;
		}

		Self operator++(int)
		{
			Self tmp(_it);
			--_it;
			return tmp;
		}

		Self operator--(int)
		{
			Self tmp(_it);
			++_it;
			return tmp;
		}
	};
}

二、list的实现

思路:本质和数据结构中的双向循环链表一样,只是用C++的语法实现的,不同点在迭代器

代码如下

namespace zxws
{
	template<class T>
	struct Node {
		T _val;
		Node* _next;
		Node* _pre;

		Node(const T& x=T())
			:_val(x)
			,_next(nullptr)
			,_pre(nullptr)
		{}
	};
    //正向迭代器的实现
	template<class T,cla
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值