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
)
;
と等価である。
目次 |
戻り値
true
派生型のオブジェクトのサイズが
0
である場合(
D
が
std::ranges::sized_range
を満たす場合)、またはその開始イテレータと番兵が等しいと比較される場合、
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++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3715 | C++20 |
empty()
は
forward_range
型のみをサポート
|
sized_range
のみの型もサポート
|
関連項目
|
(C++17)
|
コンテナが空かどうかをチェックする
(関数テンプレート) |
|
(C++20)
|
範囲が空かどうかをチェックする
(カスタマイゼーションポイントオブジェクト) |