)
- 正向迭代器
-
- 迭代器的变量与typedef与模版
- operator++()
- operator–()
- operator*()
- operator->()
- 反向迭代器
-
- 模版与typedef与变量
- operator++()
- operator–()
- operator*()
- operator->()
正向迭代器
以链表的迭代器为例
具体的代码以及可以看上一篇链表的文章:链表
迭代器的变量与typedef与模版
这例typedef是因为不想写太长
T代表类型
Ref 可以设置const与非const的迭代器
Ptr是传过来的其他类
templateclass T,class Ref,class Ptr>
struct __list__iterator
{
typedef listNodeT> Node;
typedef __list__iteratorT,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是传过来的其他类
为什么是传迭代器过来呢
因为每个迭代器实现都不一样他要用不同的迭代器
进行统一操作只能回调迭代器里面的东西
templateclass Iterator,class Ref,class Prt>
struct Reverselterator
{
typedef ReverselteratorIterator, 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*());
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net