名稱空間
變體
操作

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

來自 cppreference.com
 
 
範圍庫 (Ranges library)
範圍介面卡 (Range adaptors)
 
 
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),但 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++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 3715 C++20 empty() 僅支援 forward_range 型別 也支援僅為 sized_range 的型別

[編輯] 另請參閱

(C++17)
檢查容器是否為空
(函式模板) [編輯]
檢查範圍是否為空
(定製點物件)[編輯]