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
(若该操作有效),或者检查起始迭代器与哨位迭代器是否相等。
D
满足
sized_range
,则等价于
return
ranges::
size
(
derived
)
==
0
;
。否则等价于
return
ranges::
begin
(
derived
)
==
ranges::
end
(
derived
)
;
。
目录 |
返回值
当派生类型对象的大小为
0
(若
D
满足
std::ranges::sized_range
)或其起始迭代器与哨位比较相等时返回
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::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++ 标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 3715 | C++20 |
empty()
仅支持
forward_range
类型
|
同时支持仅满足
sized_range
的类型
|
参见
|
(C++17)
|
检查容器是否为空
(函数模板) |
|
(C++20)
|
检查范围是否为空
(定制点对象) |