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

来自cppreference.com
 
 
范围库
范围访问
范围转换器
(C++23)
范围原语



悬垂迭代器处理
范围概念
视图

范围工厂
适配器
范围生成器
范围适配器对象
范围适配器闭包对象
辅助项
 
std::ranges::view_interface
成员函数
empty
(C++20)
(C++23)
(C++23)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
 
constexpr bool empty() requires ranges::forward_range<D>;
(1) (C++20 起)
constexpr bool empty() const requires ranges::forward_range<const D>;
(2) (C++20 起)

empty 成员函数的默认实现检查起始迭代器与哨位是否比较相等。

1)derived 为绑定到 static_cast<D&>(*this) 的引用。等价于 return ranges::begin(derived) == ranges::end(derived);
2)(1) ,除了 derivedstatic_cast<const D&>(*this)

参数

(无)

返回值

若派生类型对象的起始迭代器与哨位比较相等则为 true ,否则为 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::iota_view
  • std::ranges::join_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

尽管 std::ranges::basic_istream_view 继承自 std::ranges::view_interface 并且不声明 empty 成员函数,它仍无法使用默认实现,因为它决不满足 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(2)).empty() );
    static_assert(   (a | std::views::drop(9)).empty() );
    static_assert( ! (a | std::views::drop(2)).empty() );
    static_assert(   std::views::iota(0,0).empty() );
    static_assert( ! std::views::iota(0).empty() );
}

参阅

(C++17)
检查容器是否为空
(函数模板)
检查范围是否为空
(定制点对象)