view_interface
class (стандартная библиотека C++)
Базовый класс для классов представления в std::ranges
пространстве имен. Этот класс реализует некоторый интерфейс для производных типов представлений. Используйте этот класс в качестве базового класса для собственных типов представлений, чтобы уменьшить шаблоны, необходимые для записи.
Синтаксис
template<class Derived>
requires std::is_class_v<Derived> &&
std::same_as<Derived, std::remove_cv_t<Derived>>
class view_interface;
Параметры шаблона
Derived
Тип класса, производный от этого базового класса.
Участники
Функции-члены | Description |
---|---|
back C++20 |
Получите последний элемент в производном представлении. |
data C++20 |
Получите указатель на первый элемент в производном представлении. |
empty C++20 |
Проверьте, является ли производное представление пустым. |
front C++20 |
Получите первый элемент в производном представлении. |
size C++20 |
Получение количества элементов в производном представлении. |
Операторы | Description |
operator[] C++20 |
Получите элемент в указанной позиции. |
operator bool C++20 |
Проверьте, не является ли производное представление пустым. |
Требования
Заголовок: <ranges>
(с C++20)
Пространство имен: std::ranges
Параметр компилятора: /std:c++20
или более поздней версии требуется.
back
Получите последний элемент в производном представлении.
constexpr auto back()
requires ranges::bidirectional_range<Derived> &&
ranges::common_range<Derived>;
constexpr auto back() const
requires ranges::bidirectional_range<const Derived> &&
ranges::common_range<const Derived>;
Параметры
Нет.
Возвращаемое значение
Последний элемент в производном представлении.
Замечания
Производное представление должно удовлетворять bidirectional_range
и common_range
.
Поведение и front()
не определено для любого пустого back()
представления.
data
Получите указатель на первый элемент в производном представлении.
constexpr auto data()
requires std::contiguous_iterator<ranges::iterator_t<Derived>>;
constexpr auto data() const
requires ranges::range<const Derived> &&
std::contiguous_iterator<ranges::iterator_t<const Derived>>;
Параметры
Нет.
Возвращаемое значение
Указатель на первый элемент в производном представлении.
Замечания
Итератор для производного представления должен соответствовать contiguous_iterator
.
empty
Проверьте, является ли производное представление пустым.
1) constexpr bool empty() requires ranges::forward_range<Derived>;
2) constexpr bool empty() const requires ranges::forward_range<const Derived>;
Параметры
Нет.
Возвращаемое значение
Возвращает, true
если производное представление не имеет элементов. В противном случае возвращается false
.
Замечания
Производное представление должно удовлетворять std::ranges::forward_range
.
front
Получите первый элемент в производном представлении.
constexpr auto front()
requires ranges::forward_range<Derived>;
constexpr auto front() const
requires ranges::forward_range<const Derived>;
Параметры
Нет.
Возвращаемое значение
Последний элемент в производном представлении.
Замечания
Производное представление должно удовлетворять forward_range
.
Поведение front()
не определено для std::ranges::empty_view
.
size
Получение количества элементов в производном представлении.
constexpr auto size() requires ranges::forward_range<Derived> &&
std::sized_sentinel_for<ranges::sentinel_t<Derived>,
ranges::iterator_t<Derived>>;
constexpr auto size() const requires ranges::forward_range<const Derived> &&
std::sized_sentinel_for<ranges::sentinel_t<const Derived>,
ranges::iterator_t<const Derived>>;
Параметры
Нет.
Возвращаемое значение
Количество элементов в производном представлении.
Замечания
Итератор для производного представления должен соответствовать sized_sentinel_for
.
operator[]
Получите элемент в указанной позиции.
template<ranges::random_access_range R = Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);
template<ranges::random_access_range R = const Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;
Параметры
pos
Позиция, относительно начального итератора элемента, возвращаемого.
Возвращаемое значение
Элемент в указанной позиции относительно начального итератора.
Замечания
Производное представление должно удовлетворять random_access_range
.
Поведение этого оператора не определено для std::ranges::empty_view
.
Пример: operator[]
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{1, 2, 3, 4, 5};
std::ranges::drop_view dv = std::views::drop(v, 2);
for (auto e : dv)
{
std::cout << e << ' '; // 3 4 5
}
std::cout << "\ndv[1] = " << dv[1];
}
3 4 5
dv[1] = 4
view_interface::operator bool
Проверьте, не является ли производное представление пустым.
explicit constexpr operator bool();
explicit constexpr operator bool() const;
Параметры
Нет.
Возвращаемое значение
Возвращает, false
если производное представление не имеет элементов (представление пустое). В противном случае возвращается true
(представление не пустое).
Замечания
Итератор для производного представления должен соответствовать std::ranges::forward_iterator
.
Этот оператор эквивалентен !empty()
. Это упрощает запись if (someRange) {...}
, чтобы проверить, есть ли что-то в диапазоне для работы.
Поведение этого оператора не определено для std::ranges::empty_view
.
Пример: operator bool
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{1, 2, 3, 4, 5};
std::ranges::filter_view fv = std::views::filter(v, [](int e) { return e > 3; });
bool isNotEmpty = static_cast<bool>(fv);
std::cout << "Has elements greater than 3: " << std::boolalpha << isNotEmpty << '\n' >>;
}
Has elements greater than 3: true
См. также
<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
Просмотр классов