Namespaces
Variants

std::ranges::view_interface<D>:: empty

From cppreference.net
Ranges library
Range adaptors
constexpr bool empty ( )
requires ranges:: sized_range < D > || ranges:: forward_range < D > ;
(1) (C++20 이후)
constexpr bool empty ( ) const
requires ranges:: sized_range < const D > || ranges:: forward_range < const D > ;
(2) (C++20 이후)

empty() 멤버 함수의 기본 구현은 파생 타입 객체의 크기가 0 인지(유효한 경우), 또는 시작 반복자와 센티넬이 동일한지 비교하여 확인합니다.

1) derived static_cast < D & > ( * this ) 에 바인딩된 참조로 설정합니다. D sized_range 를 만족하는 경우 return ranges:: size ( derived ) == 0 ; 와 동일합니다. 그렇지 않은 경우 return ranges:: begin ( derived ) == ranges:: end ( derived ) ; 와 동일합니다.
2) (1) 과 동일하지만, derived static_cast < const D & > ( * this ) 인 경우입니다.

목차

반환값

true 파생된 타입의 객체 크기가 0 인 경우( D std::ranges::sized_range 를 만족할 때), 또는 시작 반복자와 센티넬이 동일하게 비교되는 경우, false 그렇지 않은 경우.

참고 사항

다음 파생 타입들은 empty 의 기본 구현을 사용할 수 있습니다:

(C++23부터)
(C++26부터)

비록 std::ranges::basic_istream_view std::ranges::view_interface 를 상속받고 empty() 멤버 함수를 선언하지 않지만, 기본 구현을 사용할 수 없습니다. 왜냐하면 이것은 std::ranges::sized_range std::ranges::forward_range 도 결코 만족시키지 않기 때문입니다.

예제

#include <array>
#include <ranges>
int main()
{
    constexpr std::array a{0, 1, 2, 3, 4};
    static_assert(!std::ranges::single_view(a).empty());
    static_assert((a | std::views::take(0)).empty());
    static_assert(!(a | std::views::take(5)).empty());
    static_assert((a | std::views::drop(5)).empty());
    static_assert(!(a | std::views::drop(3)).empty());
    static_assert(std::views::iota(0,0).empty());
    static_assert(!std::views::iota(0).empty());
}

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 3715 C++20 empty() forward_range 타입만 지원됨 sized_range 전용 타입도 지원됨

참고 항목

(C++17)
컨테이너가 비어 있는지 확인합니다
(함수 템플릿)
범위가 비어 있는지 확인합니다
(커스터마이제이션 포인트 객체)