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
)
가
range
를 나타낼 때,
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
에 대해 너무 느슨했음
|
강화됨 |