operator-(ranges::zip_view::sentinel)
template< bool OtherConst > requires (std::sized_sentinel_for< |
(1) | (自 C++23) |
template< bool OtherConst > requires (std::sized_sentinel_for< |
(2) | (自 C++23) |
计算 x 的底层迭代器元组和 y 的底层哨兵元组之间的最小距离。
这些函数对普通的 无限定 或 限定查找 不可视,并且只有在 zip_view::sentinel<Const>
是参数的关联类时,才能通过 参数依赖查找 找到它们。
[编辑] 参数
x | - | 一个 迭代器 |
y | - | 一个 哨兵 |
[编辑] 返回值
令 current_
表示 x 的底层迭代器元组,end_
表示 y 的底层哨兵元组。
令 DIST(x, y, i)
为通过表达式计算的距离,该表达式等效于 std::get<i>(x.current_) - std::get<i>(y.end_),其中 i
为某个整数。
0 ≤ i < sizeof...(Views)
范围内所有 i
的 DIST(x, y, i)
中具有最小绝对值的数值。[编辑] 示例
#include <cassert> #include <deque> #include <list> #include <ranges> #include <vector> int main() { auto x = std::vector{1, 2, 3, 4}; auto y = std::deque{'a', 'b', 'c'}; auto z = {1.1, 2.2}; auto w = std::list{1, 2, 3}; auto p = std::views::zip(x, y, z); assert(p.begin() - p.end() == +2); assert(p.end() - p.begin() == -2); [[maybe_unused]] auto q = std::views::zip(x, y, w); // The following code fires a compile-time error because std::list::iterator // does not support operator- that is needed to calculate the distance: // auto e = q.begin() - q.end(); }