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 (если это допустимо), или сравниваются ли итератор начала и сторожевой объект как равные.
derived — ссылка, привязанная к static_cast<D&>(*this). Эквивалентно return ranges::size(derived) == 0;, если D удовлетворяет требованиям sized_range. В противном случае эквивалентно return ranges::begin(derived) == ranges::end(derived);.derived — static_cast<const D&>(*this).Возвращаемое значение
true, если размер объекта производного типа равен 0 (если D удовлетворяет требованиям std::ranges::sized_range) или его итератор начала и сторожевой объект сравниваются как равные; в противном случае — false.
Примечания
Следующие производные типы могут использовать реализацию empty по умолчанию:
std::ranges::common_viewstd::ranges::drop_viewstd::ranges::drop_while_viewstd::ranges::elements_viewstd::ranges::filter_viewstd::ranges::join_viewstd::ranges::lazy_split_viewstd::ranges::reverse_viewstd::ranges::single_viewstd::ranges::split_viewstd::ranges::take_viewstd::ranges::take_while_viewstd::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) | проверяет, пуст ли диапазон (объект-точка настройки) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/view_interface/empty