Namespaces
Variants

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

cppreference.net에서
 
 
범위 라이브러리
범위 어댑터
 
 
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)에 바인딩된 참조라고 합니다. return ranges::size(derived) == 0;과 동일하며, 이때 D이 sized_range를 충족하는 경우입니다. 그렇지 않으면 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)
컨테이너가 비어 있는지 확인합니다
(함수 템플릿)
범위가 비어 있는지 확인합니다
(커스터마이제이션 포인트 객체)