std:: sentinel_for
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定义于头文件
<iterator>
|
||
|
template
<
class
S,
class
I
>
concept sentinel_for
=
|
(C++20 起) | |
sentinel_for
概念规定了
input_or_output_iterator
类型与一个
semiregular
类型之间的关系,后者的值用于表示一个范围。仅用于阐述的概念
__WeaklyEqualityComparableWith
在
equality_comparable
中有详细说明。
语义要求
设
s
和
i
分别为类型
S
和
I
的值,使得
[
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++ 标准。
| DR | 适用范围 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 3453 | C++20 |
sentinel_for
的语义要求对
ranges::advance
过于宽松
|
已加强 |