行业知识
c++之迭代器与反向迭代器
2026-11-15 00:26:34
来源:互联网转载
)
- 正向迭代器
- 迭代器的变量与typedef与模版
- operator++()
- operator--()
- operator*()
- operator->()
- 反向迭代器
- 模版与typedef与变量
- operator++()
- operator--()
- operator*()
- operator->()
正向迭代器
以��表的迭代器为例
()具体的代码以及可以看上一篇链表的文章:链表
迭代器的变量与typedef与模版
这例typedef是因为不想写太长
()T代表类型
Ref 可以设置const与非const的迭代器
Ptr是传过来的其他类
templatestruct __list__iterator{typedef listNode Node;typedef __list__iterator 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是传过来的其他类
为什么是传迭代器过来呢
因为每个迭代器实现都不一样他要用不同的迭代器
进行统一操作只能回调迭代器里面的东西
templatestruct Reverselterator{typedef Reverselterator 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*());}
上一篇:服务器网络端口哪里改名?
下一篇:服务器怎么下载github?