c++之迭代器与反向迭代器

正向迭代器

链表的迭代器为例
具体的代码以及可以看上一篇链表的文章:链表

迭代器的变量与typedef与模版

这例typedef是因为不想写太长
T代表类型
Ref 可以设置const与非const的迭代器
Ptr是传过来的其他类

template<class T,class Ref,class Ptr>
struct __list__iterator
{
typedef listNode<T> Node;
typedef __list__iterator<T,Ref,Ptr> self;
Node* _node;
};

operator++()

因为迭代器是需要支持++遍历的所以要重载operator++()
不同的编译器都可能不太一样

self& operator++()
{
	_node = _node->_next;
	return *this;
}
//后置
self& operator++(int)
{
	self tmp(*this);
	_node = _node->_next;
	return tmp;
}

operator–()

同时也要支持倒着遍历

self& operator--()
{
	_node= _node->_prev;
	return *this;

}
self& operator--(int)
{
	self tmp(*this);
	_node = _node->_prev;
	return tmp;
}

operator*()

解引用找其对应的内容

Ref operator*()
{
	return _node->date;
}

operator->()

这个是为了如果传过来的是类,可以访问其类里面的内容

Ptr operator->()
{
	return &_node->date;
}

反向迭代器

反向迭代器因为和迭代器的代码太统一了,所以前辈们把反向迭代器进行了封装
让其可以用于所有的反向迭代器,这样子所有的容器的可以用这个统一的反向迭代器

模版与typedef与变量

Iterator是传过来的类的正向迭代器
Ref是判断const还是非const
Prt是传过来的其他类
为什么是传迭代器过来呢
因为每个迭代器实现都不一样他要用不同的迭代器
进行统一操作只能回调迭代器里面的东西

template<class Iterator,class Ref,class Prt>
struct Reverselterator
{
	typedef Reverselterator<Iterator, Ref,Prt> Self;
	Iterator cur;
};

operator++()

因为是反向迭代器所以++就是往前走

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

operator–()

反向迭代器–是往后走

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

operator*()

因为我设置的end在链表中是哨兵位所以要往返回其上一位的节点
找到上一个位置返回

Ref operator*()
{
	//找到上一个位置的值返回
	Iterator tmp = cur;
	--tmp;
	return *tmp;
}

operator->()

operator()是*tmp引用返回就是返回他的指针的别名然后再->其内容*
因为->->不好看所以前辈们做的特殊处理

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

相关推荐

  1. c++反向

    2024-03-11 00:54:03       27 阅读
  2. C++初阶-反向的模拟实现

    2024-03-11 00:54:03       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 00:54:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 00:54:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 00:54:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 00:54:03       20 阅读

热门阅读

  1. 序列的第 k 个数(c++题解)

    2024-03-11 00:54:03       23 阅读
  2. OceanBase社区版单节点安装搭建(Docker)

    2024-03-11 00:54:03       23 阅读
  3. Hyperf AOP 和 注解

    2024-03-11 00:54:03       22 阅读
  4. mysql 8 修改账号密码

    2024-03-11 00:54:03       18 阅读
  5. 链表简单功能的总结

    2024-03-11 00:54:03       22 阅读
  6. Ubuntu设置时区和时间同步

    2024-03-11 00:54:03       29 阅读
  7. 【国产MCU】-窗口看门狗(WWDG)

    2024-03-11 00:54:03       25 阅读
  8. SQL 数据库安全的基本概念和技术

    2024-03-11 00:54:03       20 阅读
  9. php开发100问?

    2024-03-11 00:54:03       17 阅读