std::ranges::view_interface<D>::empty
constexpr bool empty()
requires ranges::sized_range<D> || ranges::forward_range<D>;
| (1) | (since C++20) |
constexpr bool empty() const
requires ranges::sized_range<const D> || ranges::forward_range<const D>;
| (2) | (since 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_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++.
| DR | Применено к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| 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/w/cpp/ranges/view_interface/empty