std::sentinel_for

来自cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
工具
迭代器适配器
流迭代器
迭代器定制点
迭代器操作
(C++11)
(C++11)
范围访问
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
在标头 <iterator> 定义
template<class S, class I>

  concept sentinel_for =
    std::semiregular<S> &&
    std::input_or_output_iterator<I> &&

    __WeaklyEqualityComparableWith<S, I>;
(C++20 起)

sentinel_for 概念描述的 input_or_output_iteratorsemiregular 类型间的关系,二者的值代表范围。仅用于阐释的概念 __WeaklyEqualityComparableWith 描述于 equality_comparable

语义要求

si 分别表示 SI 类型的值,使得 [i, s) 代表范围。 sentinel_for<S, I> 仅若下列条件成立才得到实现:

  • i == s 为良定义。
  • bool(i != s)i 可解引用且 [++i, s) 代表范围。
  • std::assignable_from<I&, S> 要么得到实现,要么不被满足。

== 能随时间而更改。给定迭代器 i 和哨位 s 并使得 [i, s) 代表范围且 i != s ,不要求自增任何等于 i 的迭代器后 [i, s) 继续代表范围(从而这种自增后不再要求 i == s 是良定义的)。

注解

不要求哨位类型与其对应的迭代器类型实现 equality_comparable_with ,因为哨位类型可以不可与自身比较,而且不要求它们拥有共用引用类型。

C++17 起已容许在基于范围的 for 循环中使用异于迭代器类型的哨位类型。

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 3453 C++20 sentinel_for 的语义要求对 ranges::advance 过于宽松 已强化