命名空间
变体
操作

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

来自 cppreference.com
 
 
范围库
范围适配器
 
 
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) 相同,除了 derivedstatic_cast<const D&>(*this).

内容

[编辑] 参数

(无)

[编辑] 返回值

如果派生类型对象的尺寸为 0(如果 D 满足 std::ranges::sized_range),或其开始迭代器和哨兵比较相等,则为 true,否则为 false

[编辑] 注释

以下派生类型可以使用 empty 的默认实现

(自 C++23 起)

尽管 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)
检查容器是否为空
(函数模板) [编辑]
检查一个范围是否为空
(定制点对象)[编辑]