[cpp--->反向迭代器]

一、反向迭代器模拟实现

1.实现思想

通过对泛型正向迭代器的封装实现一个反向迭代器的类,使得反向迭代器的begin等于正向迭代器的end,end等于正向迭代器的begin;

*操作符重载,由于begin指向的是正向的end,所以不能直接返回值,要返回当前迭代器的下一个位置的值,但是不能直接改变当前迭代器的位置,所以构造一个正向迭代器对象减减后返回即可.
反向迭代器的++等于正向迭代器的–,–等于正向迭代器的++;
在这里插入图片描述

因为有const迭代器所以增加两个模板参数控制val的属性
_iterator.h

#pragma once
namespace kxj
{
		template <class iterator, class ref, class ptr>
		struct reverseIterator
		{
			typedef reverseIterator<iterator,ref,ptr> self;
			iterator _it;
			reverseIterator(iterator it)
				:_it(it)
			{}
			ref operator*()
			{
				iterator it = _it;
				--it;
				return *it;
			}
			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;
			}
			bool operator!=(const self& s)
			{
				return _it != s._it;
			}
			bool operator==(const self& s)
			{
				return _it == s._it;
			}
		};
}

反向迭代器是一个泛型的迭代器,所有容器都可以复用
vector.h

template <class T>
class vector
{
	typedef T* iterator;
	typedef const T* const_iterator;
	typedef kxj::reverseIterator<iterator, T&, T*> reverse_iterator;
	typedef kxj::reverseIterator<iterator, const T&, const T*> const_reverse_iterator;

	reverse_iterator rbegin()
	{
		return _finish;
	}
	reverse_iterator rend()
	{
		return _start;
	}
	const_reverse_iterator rbegin()const
	{
		return _finish;
	}
	const_reverse_iterator rend()const
	{
		return _start;
	}
};

list.h

template <class T>
class list
{
	typedef listIterator<T, T&, T*> iterator;
    typedef listIterator<T, const T&, const T*> const_iterator;
    typedef kxj::reverseIterator<iterator, T&, T*> reverse_iterator;
    typedef kxj::reverseIterator<iterator, const T&, const T*> const_reverse_iterator;
    reverse_iterator rbegin()
    {
        /*○(尾)<-->1(头)<-->2<-->3 */
        return reverse_iterator(_phead);
    }
    reverse_iterator rend()
    {
       return reverse_iterator(_phead->_next);
    }
    const_reverse_iterator rbegin() const
    {
        return const_reverse_iterator(_phead);
    }
    const_reverse_iterator rend() const
    {
        return const_reverse_iterator(_phead->_next);
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值