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

来自cppreference.com
 
 
范围库
范围适配器
 
 
constexprbool empty()
    requires ranges::sized_range<D>||ranges::forward_range<D>;
(1) (C++20 起)
constexprbool 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 时等价于 returnranges::size(derived)==0;。否则,等价于 returnranges::begin(derived)==ranges::end(derived);
2)(1),但 derivedstatic_cast<const D&>(*this)

目录

[编辑]返回值

若派生类型对象的大小为 0(当 D 满足 std::ranges::sized_range),或其起始迭代器与哨位比较相等,则为 true,否则为 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(){constexprstd::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++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 3715 C++20 empty() 仅支持 forward_range 类型 也支持仅为 sized_range 的类型

[编辑]参阅

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