operator+,-(ranges::concat_view::iterator)
来自cppreference.com
< cpp | ranges | concat view | iterator
friend constexpr /*iterator*/ operator+( const /*iterator*/& it, difference_type n ) |
(1) | (C++26 起) |
friend constexpr /*iterator*/ operator+( difference_type n, const /*iterator*/& it ) |
(2) | (C++26 起) |
friend constexpr /*iterator*/ operator-( const /*iterator*/& it, difference_type n ) |
(3) | (C++26 起) |
friend constexpr difference_type operator-( const /*iterator*/& x, const /*iterator*/& y ) |
(4) | (C++26 起) |
friend constexpr difference_type operator-( const /*iterator*/& x, std::default_sentinel_t ) |
(5) | (C++26 起) |
friend constexpr difference_type operator-( std::default_sentinel_t, const /*iterator*/& x ) |
(6) | (C++26 起) |
增加或减少迭代器。
1) 等价于:auto t = it; t += n; return t;。
2) 等价于:return it + n;。
3) 等价于:auto t = it; t -= n; return t;。
4) 令 ix 代表 x
.
it_
.
index() 并令 iy 代表 y.
it_
.
index()。
- 如果 ix > iy,则等价于:return dy + s + dx;,其中:
- dy 为 ranges::distance(std::get<iy>(y.it_), ranges::end(std::get<iy>(y.parent_->views_))),
- dx 为 ranges::distance(ranges::begin(std::get<ix>(x.parent_->views_)), std::get<ix>(x.it_)),
- s 为对于
[
iy + 1,
ix)
中的每个整数 i 的所有范围 std::get<i>(x.parent_->views_) 的大小的和(如果有),否则为 0,其类型为difference_type
。
- 否则,如果 ix < iy 为 true,则等价于:return -(y - x);。
- 否则,等价于:return std::get<ix>(x.it_) - std::get<iy>(y.it_);。
Before the call to this function x
.
it_
.
valueless_by_exception() and y.
it_
.
valueless_by_exception() must each be false.否则,其行为未定义。5) 等价于:return -(dx + s);,其中:
- ix 为 x
.
it_
.
index(), - dx 为 ranges::distance(std::get<ix>(x.it_), ranges::end(std::get<ix>(x.parent_->views_))),
- s 为对于
[
ix + 1,
sizeof...(Views))
中的每个整数 i 的所有范围 std::get<i>(x.parent_->views_) 的大小的和(如果有),否则为 0,其类型为difference_type
。
令 Fs 为由
(std::sized_sentinel_for<
ranges::sentinel_t<std::conditional_t<Const, const Views, Views>>,
ranges::iterator_t<std::conditional_t<Const, const Views, Views>>> && ...) &&
(ranges::sized_range<std::conditional_t<Const, const Fs, Fs>> && ...)。
Views
中除了首元素外所有元素组成的包。requires子句中的表达式等价于:(std::sized_sentinel_for<
ranges::sentinel_t<std::conditional_t<Const, const Views, Views>>,
ranges::iterator_t<std::conditional_t<Const, const Views, Views>>> && ...) &&
(ranges::sized_range<std::conditional_t<Const, const Fs, Fs>> && ...)。
调用这个函数之前,x
.
it_
.
valueless_by_exception() 必须为 false。否则,其行为未定义。6) 等价于:return -(x - default_sentinel);
令 Fs 为由
(std::sized_sentinel_for<
ranges::sentinel_t<std::conditional_t<Const, const Views, Views>>,
ranges::iterator_t<std::conditional_t<Const, const Views, Views>>> && ...) &&
(ranges::sized_range<std::conditional_t<Const, const Fs, Fs>> && ...)。
Views
中除了首元素外所有元素组成的包。requires子句中的表达式等价于:(std::sized_sentinel_for<
ranges::sentinel_t<std::conditional_t<Const, const Views, Views>>,
ranges::iterator_t<std::conditional_t<Const, const Views, Views>>> && ...) &&
(ranges::sized_range<std::conditional_t<Const, const Fs, Fs>> && ...)。
这些函数对常规的无限定或有限定查找不可见,而只能在 concat_view::iterator<Const>
为实参的关联类时由实参依赖查找找到。
参数
it, x, y | - | 迭代器 |
n | - | 相对于当前位置的位置 |
返回值
1,2) 增加后的迭代器
3) 减少后的迭代器
4) 给定迭代器之间的距离
示例
本节未完成 原因:暂无示例 |
参阅
推进或减小底层迭代器 (公开成员函数) |