C++反向迭代器的实现

一、反向迭代器的定义

  • 在容器中从尾元素向首元素反向移动的迭代器

  • 对于反向迭代器,递增和递减的含义会颠倒过来

  • 递增一个反向迭代器会移动到前一个元素

  • 递减一个迭代器会移动到下一个元素

 

二、反向迭代器的实现

// 适配器 -- 复用
template<class Iterator, class Ref, class Ptr>
struct Reverse_iterator
{
	typedef Reverse_iterator<Iterator, Ref, Ptr> Self;
	Iterator _it;
	Reverse_iterator(Iterator it)
		:_it(it)
	{}
	Ref operator*()
	{
		Iterator tmp = _it;
		return *(--tmp);
	}
	Ptr operator->()
	{
		return &(operator*());
	}
	Self& operator++()
	{
		--_it;
		return *this;
	}
	Self& operator--()
	{
		++_it;
		return *this;
	}
	bool operator==(const Self& s)
	{
		return _it == s._it;
	}
	bool operator!=(const Self& s)
	{
		return _it != s._it;
	}
};

在实现时。我们实际是复用iterator,来实现Reverse_iterator。

所以在构造函数中,我们直接使用iterator对反向迭代器进行初始化。

在解引用操作时,因为从end()位置开始,所以要先--,获得新的位置,但不改变原来的_it ,所以建立一个临时对象对其进行--操作。

三、rbegin以及rend

为了实现rbegin或者rend,我们首先要在list或者vector中定义:

typedef Reverse_iterator<iterator, T&, T*> reverse_iterator;
typedef Reverse_iterator<const_iterator, const T&, const T*> const_reverse_iterator;

rbegin:

reverse_iterator rbegin()
{
	return reverse_iterator(end());
}

const_reverse_iterator rbegin() const
{
	return const_reverse_iterator(end());
}

rend:

reverse_iterator rend()
{
	return reverse_iterator(begin());
}

const_reverse_iterator rend() const
{
	return const_reverse_iterator(begin());
}

相关推荐

  1. C++初阶-反向模拟实现

    2024-04-12 14:44:03       51 阅读
  2. c++之反向

    2024-04-12 14:44:03       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 14:44:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 14:44:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 14:44:03       87 阅读
  4. Python语言-面向对象

    2024-04-12 14:44:03       96 阅读

热门阅读

  1. 详解Qt元对象系统

    2024-04-12 14:44:03       40 阅读
  2. 在Windows系统中开启SSH服务

    2024-04-12 14:44:03       42 阅读
  3. home assistant os安装docker

    2024-04-12 14:44:03       38 阅读
  4. 更改grub文件导致无法开机解决办法

    2024-04-12 14:44:03       117 阅读
  5. 分布式锁内容

    2024-04-12 14:44:03       36 阅读
  6. 怎么重构一个程序

    2024-04-12 14:44:03       38 阅读
  7. freeRTOS学习

    2024-04-12 14:44:03       117 阅读
  8. 身份证识别ocr、身份证实名认证接口文档

    2024-04-12 14:44:03       47 阅读
  9. 2024.03.31 校招 实习 内推 面经

    2024-04-12 14:44:03       124 阅读