名前空間
変種
操作

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

From cppreference.com
 
 
Rangesライブラリ
Rangeアダプタ
 
 
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) derivedstatic_cast<D&>(*this) に束縛された参照であるとします。Dsized_range を満たす場合は return ranges::size(derived) == 0; と同等です。それ以外の場合は、 return ranges::begin(derived) == ranges::end(derived); と同等です。
(1) と同じですが、derivedstatic_cast<const D&>(*this) である点が異なります。

目次

[edit] パラメータ

(なし)

[edit] 戻り値

派生型のオブジェクトのサイズが 0 である場合(Dstd::ranges::sized_range を満たす場合)、またはその開始イテレータとセンチネルが等しい場合は true。それ以外の場合は false

[edit] 注釈

以下の派生型は empty のデフォルト実装を使用できます。

(C++23から)

std::ranges::basic_istream_viewstd::ranges::view_interface から継承し、empty() メンバ関数を宣言していませんが、neither std::ranges::sized_range nor std::ranges::forward_range を満たさないため、デフォルト実装を使用できません。

[edit]

#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());
}

[edit] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 3715 C++20 empty()forward_range 型のみをサポートしていました。 sized_range のみのような型もサポートされるようになりました。

[edit] 関連項目

(C++17)
コンテナが空かどうかをチェックする
(function template) [編集]
rangeが空かどうかをチェックする
(カスタマイゼーションポイントオブジェクト)[編集]
English 日本語 中文(简体) 中文(繁體)