std::ranges::view_interface<D>::empty
來自 cppreference.com
< cpp | ranges | view interface
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) 的引用。如果
D
滿足 sized_range
,則等價於 return ranges::size(derived) == 0;。否則,等價於 return ranges::begin(derived) == ranges::end(derived);。2) 同 (1),但 derived 為 static_cast<const D&>(*this)。
目錄 |
[編輯] 引數
(無)
[編輯] 返回值
如果派生型別的物件大小為 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
儘管 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) |
檢查範圍是否為空 (定製點物件) |