std::ranges:: size
|
헤더에 정의됨
<ranges>
|
||
|
헤더에 정의됨
<iterator>
|
||
|
inline
namespace
/* unspecified */
{
inline
constexpr
auto
size
=
/* unspecified */
;
|
(C++20부터)
(customization point object) |
|
|
호출 시그니처
|
||
|
template
<
class
T
>
requires
/* see below */
|
(C++20부터) | |
t 내 원소의 개수를 상수 시간에 계산합니다.
주어진
부분식
에서
t
가 (
구체화된
가능성이 있는) 결과 객체를 나타내고,
E
의 타입이
T
인 경우:
-
만약
T가 경계를 알 수 없는 배열인 경우, ranges :: size ( E ) 는 올바르지 않은 형식입니다. -
그렇지 않고,
T가 배열 타입인 경우, ranges :: size ( E ) 는 표현식-동등 합니다 decay-copy ( std:: extent_v < T > ) (C++23 이전) auto ( std:: extent_v < T > ) (C++23 이후) 에게. -
그렇지 않고 다음 조건들이 모두 만족되면,
ranges
::
size
(
E
)
는 다음 표현과 expression-equivalent입니다:
decay-copy
(
t.
size
(
)
)
(C++23 이전)
auto
(
t.
size
(
)
)
(C++23 이후)
:
- ranges:: disable_sized_range < std:: remove_cv_t < T >> 가 false 입니다.
- decay-copy ( t. size ( ) ) (C++23 이전) auto ( t. size ( ) ) (C++23 이후) 가 integer-like type 의 유효한 표현식입니다.
-
그렇지 않고 다음 조건들이 모두 만족되면,
ranges
::
size
(
E
)
는 다음 표현식과 동등합니다:
decay-copy
(
size
(
t
)
)
(C++23 이전)
auto
(
size
(
t
)
)
(C++23 이후)
:
-
T가 클래스 또는 열거형 타입인 경우. - ranges:: disable_sized_range < std:: remove_cv_t < T >> 가 false 인 경우.
-
decay-copy
(
size
(
t
)
)
(C++23 이전)
auto
(
size
(
t
)
)
(C++23 이후)
가 정수형 타입의 유효한 표현식이며, 여기서
size의 의미는 인자 의존적 탐색 만을 수행하는 것으로 설정됩니다.
-
-
그렇지 않으면, 다음의 모든 조건이 만족되는 경우,
ranges
::
size
(
E
)
는 다음 표현식과 동등합니다:
to-unsigned-like ( ranges:: end ( t ) - ranges:: begin ( t ) ) :-
T가forward_range를 모델합니다. -
ranges::
begin
(
t
)
의 타입을
I로, ranges:: end ( t ) 의 타입을S로 할 때,sized_sentinel_for< S, I > 와forward_iterator< I > 가 모두 모델됩니다. -
to-unsigned-like ( ranges:: end ( t ) - ranges:: begin ( t ) ) 가 유효한 표현식입니다.
-
- 그렇지 않으면, ranges :: size ( E ) 는 올바르지 않은 형식입니다.
위에서 진단 가능한 잘못 형성된 경우들은 치환 실패 를 초래합니다. 이는 ranges :: size ( E ) 가 템플릿 인스턴스화의 직접적인 문맥에 나타날 때 발생합니다.
목차 |
커스터마이제이션 포인트 객체
ranges::size
이름은
커스터마이제이션 포인트 객체
를 나타내며, 이는
함수 객체
의 리터럴
리터럴
semiregular
클래스 타입의 const 객체입니다. 자세한 내용은
CustomizationPointObject
를 참조하십시오.
참고 사항
표현식 ranges :: size ( e ) 가 유효할 때마다, 반환 타입은 integer-like 입니다.
C++20 표준은 기본
size
함수 호출이 prvalue를 반환하는 경우, 반환 값이 구체화된 임시 객체에서 이동 생성되도록 요구합니다. 모든 구현체는 직접 prvalue를 반환합니다. 이 요구사항은 구현체와 일치하도록 C++20 이후 제안서
P0849R8
에 의해 수정되었습니다.
표현식 ranges:: distance ( e ) 는 범위 e 의 크기를 결정하는 데에도 사용될 수 있습니다. ranges :: size ( e ) 와 달리, ranges:: distance ( e ) 는 e 가 크기가 지정되지 않은 범위인 경우에도 작동하지만, 그 경우 선형 복잡도의 비용이 발생합니다.
예제
#include <iostream> #include <ranges> #include <type_traits> #include <vector> int main() { auto v = std::vector<int>{}; std::cout << "ranges::size(v) == " << std::ranges::size(v) << '\n'; auto il = {7}; // std::initializer_list std::cout << "ranges::size(il) == " << std::ranges::size(il) << '\n'; int array[]{4, 5}; // array has a known bound std::cout << "ranges::size(array) == " << std::ranges::size(array) << '\n'; static_assert(std::is_signed_v<decltype(std::ranges::size(v))> == false); }
출력:
ranges::size(v) == 0 ranges::size(il) == 1 ranges::size(array) == 2
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| P2602R2 | C++20 |
ADL
로 발견되는 특정 비멤버
size
를 금지하는 메커니즘이 존재함
|
해당 메커니즘 제거됨 |
참고 항목
|
(C++20)
|
범위의 크기와 동일한 부호 있는 정수를 반환함
(커스터마이제이션 포인트 객체) |
|
(C++20)
|
범위가 상수 시간에 자신의 크기를 알 수 있음을 명시함
(컨셉) |
|
(C++20)
|
반복자와 센티넬 사이의 거리, 또는 범위의 시작과 끝 사이의 거리를 반환함
(알고리즘 함수 객체) |
|
(C++17)
(C++20)
|
컨테이너나 배열의 크기를 반환함
(함수 템플릿) |