1#ifndef NEFORCE_CORE_ITERATOR_REVERSE_ITERATOR_HPP__
2#define NEFORCE_CORE_ITERATOR_REVERSE_ITERATOR_HPP__
12NEFORCE_BEGIN_NAMESPACE__
28template <
typename Iterator>
53 current(_NEFORCE
move(x)) {}
63#ifdef NEFORCE_STANDARD_20
78#ifdef NEFORCE_STANDARD_20
95 NEFORCE_NODISCARD constexpr
reference operator*() const
97 Iterator iter = current;
110#ifdef NEFORCE_STANDARD_20
114 Iterator tmp = current;
125 constexpr reverse_iterator&
operator++() noexcept(noexcept(--current)) {
135 noexcept(--current)) {
136 reverse_iterator tmp = *
this;
147 constexpr reverse_iterator&
operator--() noexcept(noexcept(++current)) {
157 noexcept(++current)) {
158 reverse_iterator tmp = *
this;
221 NEFORCE_NODISCARD
constexpr const Iterator&
base() const noexcept {
return current; }
232template <
typename Iterator1,
typename Iterator2>
233NEFORCE_NODISCARD
constexpr bool
242 return x.base() == y.base();
253template <
typename Iterator1,
typename Iterator2>
254NEFORCE_NODISCARD
constexpr bool
263 return x.base() != y.base();
275template <
typename Iterator1,
typename Iterator2>
276NEFORCE_NODISCARD
constexpr bool
285 return x.base() > y.base();
296template <
typename Iterator1,
typename Iterator2>
297NEFORCE_NODISCARD
constexpr bool
306 return x.base() < y.base();
317template <
typename Iterator1,
typename Iterator2>
318NEFORCE_NODISCARD
constexpr bool
327 return x.base() >= y.base();
338template <
typename Iterator1,
typename Iterator2>
339NEFORCE_NODISCARD
constexpr bool
348 return x.base() <= y.base();
360template <
typename Iterator1,
typename Iterator2>
361NEFORCE_NODISCARD
constexpr decltype(
auto)
374template <
typename Iterator>
386template <
typename Iterator>
394NEFORCE_END_NAMESPACE__
constexpr reverse_iterator operator-(const difference_type n) const noexcept(noexcept(reverse_iterator(current+n)))
减法运算符
iter_category_t< Iterator > iterator_category
constexpr reverse_iterator()=default
默认构造函数
constexpr reverse_iterator(Iterator x) noexcept(is_nothrow_move_constructible_v< Iterator >)
从底层迭代器构造
constexpr reverse_iterator(const reverse_iterator< U > &x) noexcept(is_nothrow_constructible_v< Iterator, const U & >)
从其他类型的反向迭代器构造
constexpr reverse_iterator operator--(int) noexcept(is_nothrow_copy_constructible_v< Iterator > &&noexcept(++current))
后缀递减运算符
iter_reference_t< Iterator > reference
constexpr reverse_iterator & operator+=(const difference_type n) noexcept(noexcept(current -=n))
复合加法赋值运算符
constexpr reverse_iterator & operator++() noexcept(noexcept(--current))
前缀递增运算符
constexpr reverse_iterator & operator-=(const difference_type n) noexcept(noexcept(current+=n))
复合减法赋值运算符
iter_pointer_t< Iterator > pointer
iter_value_t< Iterator > value_type
iter_difference_t< Iterator > difference_type
NEFORCE_CONSTEXPR20 ~reverse_iterator() noexcept=default
析构函数
constexpr reverse_iterator operator++(int) noexcept(is_nothrow_copy_constructible_v< Iterator > &&noexcept(--current))
后缀递增运算符
NEFORCE_NODISCARD constexpr const Iterator & base() const noexcept
获取底层迭代器
constexpr reverse_iterator & operator=(const reverse_iterator< U > &x) noexcept(is_nothrow_assignable< reverse_iterator &, const U & >::value)
从其他类型的反向迭代器赋值
constexpr reverse_iterator operator+(const difference_type n) const noexcept(noexcept(reverse_iterator(current - n)))
加法运算符
NEFORCE_NODISCARD constexpr pointer operator->() const noexcept(is_nothrow_copy_constructible< Iterator >::value &&noexcept(--(_NEFORCE declval< Iterator & >())) &&is_nothrow_arrow< Iterator &, pointer >::value)
成员访问运算符
constexpr reference operator[](const difference_type n) const noexcept(noexcept(_NEFORCE declcopy< reference >(reverse_iterator(current - n))))
下标运算符
constexpr reverse_iterator & operator--() noexcept(noexcept(++current))
前缀递减运算符
NEFORCE_INLINE17 constexpr bool is_pointer_v
is_pointer的便捷变量模板
#define NEFORCE_STANDARD_20
使用C++20或更高标准编译
NEFORCE_INLINE17 constexpr bool is_ranges_bid_iter_v
检查是否为范围双向迭代器
constexpr iter_pointer_t< Iterator > to_pointer(Iterator iter)
将迭代器转换为原始指针
typename iterator_traits< Iterator >::reference iter_reference_t
获取迭代器的引用类型
typename iterator_traits< Iterator >::iterator_category iter_category_t
获取迭代器的类别标签
typename iterator_traits< Iterator >::value_type iter_value_t
获取迭代器的值类型
typename iterator_traits< Iterator >::difference_type iter_difference_t
获取迭代器的差值类型
typename iterator_traits< Iterator >::pointer iter_pointer_t
获取迭代器的指针类型
NEFORCE_NODISCARD constexpr bool operator>(const reverse_iterator< Iterator1 > &x, const reverse_iterator< Iterator2 > &y) noexcept(noexcept(_NEFORCE declcopy< bool >(x.base()< y.base())))
大于比较运算符
NEFORCE_NODISCARD constexpr bool operator!=(const reverse_iterator< Iterator1 > &x, const reverse_iterator< Iterator2 > &y) noexcept(noexcept(_NEFORCE declcopy< bool >(x.base() !=y.base())))
不等比较运算符
constexpr reverse_iterator< Iterator > operator+(iter_difference_t< Iterator > n, const reverse_iterator< Iterator > &x) noexcept(noexcept(x+n))
与整数相加的运算符
NEFORCE_NODISCARD constexpr bool operator==(const reverse_iterator< Iterator1 > &x, const reverse_iterator< Iterator2 > &y) noexcept(noexcept(_NEFORCE declcopy< bool >(x.base()==y.base())))
相等比较运算符
NEFORCE_NODISCARD constexpr bool operator>=(const reverse_iterator< Iterator1 > &x, const reverse_iterator< Iterator2 > &y) noexcept(noexcept(_NEFORCE declcopy< bool >(x.base()<=y.base())))
大于等于比较运算符
NEFORCE_NODISCARD constexpr bool operator<=(const reverse_iterator< Iterator1 > &x, const reverse_iterator< Iterator2 > &y) noexcept(noexcept(_NEFORCE declcopy< bool >(x.base() >=y.base())))
小于等于比较运算符
NEFORCE_NODISCARD constexpr bool operator<(const reverse_iterator< Iterator1 > &x, const reverse_iterator< Iterator2 > &y) noexcept(noexcept(_NEFORCE declcopy< bool >(x.base() > y.base())))
小于比较运算符
NEFORCE_NODISCARD constexpr reverse_iterator< Iterator > make_reverse_iterator(Iterator it) noexcept(is_nothrow_move_constructible_v< Iterator >)
创建反向迭代器
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
NEFORCE_INLINE17 constexpr bool is_nothrow_constructible_v
is_nothrow_constructible的便捷变量模板
NEFORCE_INLINE17 constexpr bool is_nothrow_move_constructible_v
is_nothrow_move_constructible的便捷变量模板
NEFORCE_INLINE17 constexpr bool is_nothrow_copy_constructible_v
is_nothrow_copy_constructible的便捷变量模板