1#ifndef NEFORCE_CORE_ALGORITHM_ITERATOR_HPP__
2#define NEFORCE_CORE_ALGORITHM_ITERATOR_HPP__
14NEFORCE_BEGIN_NAMESPACE__
22#ifndef NEFORCE_STANDARD_17
26template <
typename Ptr>
31template <
typename Iterator>
33 return iter.operator->();
46template <
typename Iterator>
48#ifdef NEFORCE_STANDARD_17
52 return iter.operator->();
55 return inner::__to_pointer_aux(iter);
60#ifndef NEFORCE_STANDARD_17
64template <
typename Iterator,
typename Distance>
69template <
typename Iterator,
typename Distance>
80template <
typename Iterator,
typename Distance>
83 NEFORCE_DEBUG_VERIFY__(
is_signed_v<Distance> && n >= 0,
"negative advance of non-bidirectional iterator");
105template <
typename Iterator,
typename Distance>
106constexpr void advance(Iterator& i, Distance n) {
110#ifdef NEFORCE_STANDARD_17
127 inner::__advance_aux(i, n);
140template <
typename Iterator>
156template <
typename Iterator>
164#ifndef NEFORCE_STANDARD_17
168template <
typename Iterator>
174template <
typename Iterator>
178 while (first != last) {
200template <
typename Iterator>
204#ifdef NEFORCE_STANDARD_17
209 while (first != last) {
216 return inner::__distance_aux(first, last);
222NEFORCE_END_NAMESPACE__
NEFORCE_INLINE17 constexpr bool is_signed_v
is_signed的便捷变量模板
NEFORCE_INLINE17 constexpr bool is_arithmetic_v
is_arithmetic的便捷变量模板
NEFORCE_INLINE17 constexpr bool is_pointer_v
is_pointer的便捷变量模板
#define NEFORCE_DEBUG_VERIFY(CON, MESG)
调试模式断言
NEFORCE_INLINE17 constexpr bool is_bid_iter_v
检查是否为双向迭代器
NEFORCE_INLINE17 constexpr bool is_ranges_bid_iter_v
检查是否为范围双向迭代器
NEFORCE_INLINE17 constexpr bool is_rnd_iter_v
检查是否为随机访问迭代器
NEFORCE_INLINE17 constexpr bool is_iter_v
检查类型是否为迭代器
NEFORCE_INLINE17 constexpr bool is_ranges_rnd_iter_v
检查是否为范围随机访问迭代器
constexpr void advance(Iterator &i, Distance n)
将迭代器前进指定距离
constexpr Iterator prev(Iterator iter, iter_difference_t< Iterator > n=-1)
获取迭代器的前一个位置
constexpr iter_pointer_t< Iterator > to_pointer(Iterator iter)
将迭代器转换为原始指针
constexpr Iterator next(Iterator iter, iter_difference_t< Iterator > n=1)
获取迭代器的后一个位置
constexpr iter_difference_t< Iterator > distance(Iterator first, Iterator last)
计算两个迭代器之间的距离
typename iterator_traits< Iterator >::difference_type iter_difference_t
获取迭代器的差值类型
typename iterator_traits< Iterator >::pointer iter_pointer_t
获取迭代器的指针类型
typename enable_if< Test, T >::type enable_if_t
enable_if的便捷别名