iterator adapter reverse_iterator
来源:互联网 发布:老男孩linux培训课件 编辑:程序博客网 时间:2024/06/05 15:45
1.迭代器适配器reverse_iterator
template <class _Iterator>class reverse_iterator
{
protected:
_Iterator current; //对应之正向迭代器
public:
//逆向迭代器的5种associated types都和其相对应
iterator_category;
typedef typename iterator_traits<_Iterator>::value_type
value_type;
typedef typename iterator_traits<_Iterator>::difference_type
difference_type;
typedef typename iterator_traits<_Iterator>::pointer
pointer;
typedef typename iterator_traits<_Iterator>::reference
reference;
typedef _Iterator iterator_type; //代表正向迭代器
typedef reverse_iterator<_Iterator> _Self; //代表逆向迭代器
public:
reverse_iterator() {}
explicit reverse_iterator(iterator_type __x) : current(__x) {}
reverse_iterator(const _Self& __x) : current(__x.current) {}
#ifdef __STL_MEMBER_TEMPLATES
template <class _Iter>
reverse_iterator(const reverse_iterator<_Iter>& __x)
: current(__x.base()) {}
#endif /* __STL_MEMBER_TEMPLATES */
iterator_type base() const { return current; } //取出对应的正向迭代器
//对逆向迭代器取值,就是将对应之正向迭代器退一位取值
_Iterator __tmp = current;
return *--__tmp;
}
#ifndef __SGI_STL_NO_ARROW_OPERATOR
pointer operator->() const { return &(operator*()); }
#endif /* __SGI_STL_NO_ARROW_OPERATOR */
//前进变后退,后退变成前进
--current;
return *this;
}
_Self operator++(int) {
_Self __tmp = *this;
--current;
return __tmp;
}
_Self& operator--() {
++current;
return *this;
}
_Self operator--(int) {
_Self __tmp = *this;
++current;
return __tmp;
}
_Self operator+(difference_type __n) const {
return _Self(current - __n);
}
_Self& operator+=(difference_type __n) {
current -= __n;
return *this;
}
_Self operator-(difference_type __n) const {
return _Self(current + __n);
}
_Self& operator-=(difference_type __n) {
current += __n;
return *this;
}
reference operator[](difference_type __n) const { return *(*this + __n); }
};
2.rbegin,rend
reverse_iterator rbegin() { return reverse_iterator(end()); }
reverse_iterator rend() { return reverse_iterator(begin()); }
阅读全文
1 0
- iterator adapter reverse_iterator
- iterator与reverse_iterator
- Iterator adapter
- 通过reverse_iterator的base()得到iterator
- 再探reverse_iterator和iterator的关系
- reverse_iterator
- 了解如何通过reverse_iterator的base得到iterator
- 迭代器(iterator)与逆向迭代器(reverse_iterator)的转换
- 在遍历中使用 iterator/reverse_iterator 进行 Erase 的用法
- 如何在遍历中使用 iterator/reverse_iterator 删除元素
- 在遍历中使用 iterator/reverse_iterator 进行 Erase 的用法
- 了解如何通过reverse_iterator的base得到iterator
- 在遍历中使用 iterator/reverse_iterator 进行 Erase 的用法
- 在遍历中使用 iterator/reverse_iterator 进行 Erase 的用法
- STL: reverse_iterator / iterator 关系以及 erase 相关(C++)
- 如何在遍历中使用 iterator/reverse_iterator 删除元素
- 在遍历中使用 iterator/reverse_iterator 进行 Erase 的用法
- 在遍历中使用 iterator/reverse_iterator 进行 Erase 的用法
- 仿CSDN客户端首页(一)----TabLayout实现选项卡滑动效果
- 设计模式---工厂模式
- C#中使用系统剪切板
- 【推荐】微服务大型分布式企业框架 Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis+KafKa
- 创建CubieBoard2交叉编译链
- iterator adapter reverse_iterator
- uva699 The Falling Leaves 二叉树
- is-a && has-a && like-a
- 【如何校验邮件地址的有效性】第一篇 :为什么要校验邮箱地址有效性?使用场景在哪里?
- 24.返回栈
- Linux环境下通过ODBC访问MSSql Server
- 第8章节_进程控制
- Java编程入门学习开发的20个必备技术点
- Error UNKNOWN_MEMBER_ID occurred while committing offsets for group ***