std::ranges::view_interface<D>::empty
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인지 확인하거나(유효한 경우), 시작 반복자와 종단점이 동일한지 비교합니다.
derived을 static_cast<D&>(*this)에 바인딩된 참조라고 합니다. return ranges::size(derived) == 0;과 동일하며, 이때 D이 sized_range를 충족하는 경우입니다. 그렇지 않으면 return ranges::begin(derived) == ranges::end(derived);과 동일합니다.derived이 static_cast<const D&>(*this)인 점이 다릅니다.반환값
true
파생된 타입의 객체 크기가
0
인 경우(
D
가
std::ranges::sized_range
를 만족할 때), 또는 시작 반복자와 센티넬이 동일하게 비교되는 경우,
false
그렇지 않은 경우.
참고 사항
다음 파생 타입들은
empty
의 기본 구현을 사용할 수 있습니다:
- std::ranges::common_view
- std::ranges::drop_view
- std::ranges::drop_while_view
- std::ranges::elements_view
- std::ranges::filter_view
- std::ranges::join_view
- std::ranges::lazy_split_view
- std::ranges::reverse_view
- std::ranges::single_view
- std::ranges::split_view
- std::ranges::take_view
- std::ranges::take_while_view
- std::ranges::transform_view
| (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)
|
컨테이너가 비어 있는지 확인합니다
(함수 템플릿) |
|
(C++20)
|
범위가 비어 있는지 확인합니다
(커스터마이제이션 포인트 객체) |