《STL容器篇》-List模拟实现(三种反向迭代器)

一、本篇接口实现包括

list内typedef包括:
typedef __list_node<T> node;
typedef Iterator<T, T&, T*> iterator;
typedef Iterator<T, const T&, const T*> const_iterator;
typedef Reverse_iterator<iterator> reverse_iterator;
typedef Reverse_iterator<const_iterator> const_reverse_iterator;

函数接口包括:
void empty_init()
list()
template<class InputIteartor>
list(InputIteartor first, InputIteartor last)
void push_back(const T& x)
list(const list<T>& t)//传统写法
list(const list<T>& t)//现代写法
list<T>& operator=(const list<T>& t)//传统写法
list<T>& operator=(list<T> t)//现代写法
void swap(list<T>& t)
void push_front(const T& x)
iterator insert(iterator pos ,const T& x)
void pop_back()
void pop_front()
void clear()
~list()
iterator erase(iterator pos)
iterator begin()
iterator end()
const_iterator begin()const
const_iterator end()const 
reverse_iterator rbegin()
reverse_iterator rend()
const_reverse_iterator rbegin()const
const_reverse_iterator rend()const

二、接口全实现

https://gitee.com/zxlfx/c-code-warehouse/tree/master/2022_7_21/2022_7_21

三、正向、反向迭代器

有了前面的string、vector的模拟实现,list的模拟并不困难,如同实现一个双链表。本章的重点在于正向和反向的迭代器是怎么实现的?

3.1正向迭代器

这里的正向迭代器并不像string和vector一样是一个原生指针,因为list的节点不是连续的,原生指针无法做到,因此需要写一个封装了众多重载运算符的结构类型。

第一个版本的正向迭代器是以下这种样子

	template<class T>
	struct Iterator
	{
	public:
		typedef __list_node<T> node;
		typedef Iterator<T> sef;
		Iterator(node* node = nullptr)
		{
			cur = node;
		}

		T& operator*()
		{
			return cur->val;
		}

		T* operator->()
		{
			return &cur->val;
		}

		sef
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李逢溪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值