common_view
class (стандартная библиотека C++)
Выполните диапазон, который может иметь разные итераторы и типы sentinel, и создайте представление с одинаковым итератором и типом sentinel. Это полезно для вызова алгоритмов STL, которые принимают диапазоны, указанные парами итератора.
Синтаксис
template<ranges::view V>
requires (!ranges::common_range<V> && std::copyable<ranges::iterator_t<V>>)
class common_view : public ranges::view_interface<common_view<V>>;
Параметры шаблона
V
Тип базового представления.
Просмотр характеристик
Описание следующих записей см. в разделе "Просмотр характеристик класса"
Characteristic | Description |
---|---|
Адаптер диапазона | views::common |
Базовый диапазон | Должно соответствовать forward_range или выше |
Тип элемента | Совпадает с базовым диапазоном |
Просмотр категории итератора | forward_range или random_access_range когда базовый диапазон удовлетворяет random_access_range и sized_range |
Размер | Только если базовый диапазон удовлетворяет sized_range |
Is const -iterable |
Только в том случае, если базовый диапазон является const итерируемым |
Общий диапазон | Да |
Заимствуемый диапазон | Только если базовый диапазон удовлетворяет borrowed_range |
Участники
Функции-члены | Description |
---|---|
КонструкторыC++20 | Создайте common_view |
base C++20 |
Получите базовое представление. |
begin C++20 |
Получите итератор к первому элементу в представлении. |
end C++20 |
Получите sentinel в конце представления. |
size C++20 |
Получение количества элементов в представлении. |
Наследуется от view_interface |
Description |
back C++20 |
Получите последний элемент. |
data C++20 |
Получите указатель на первый элемент. |
empty C++20 |
Проверьте, является ли представление пустым. |
front C++20 |
Получите первый элемент. |
operator[] C++20 |
Получите элемент в указанной позиции. |
operator bool C++20 |
Проверьте, не является ли представление пустым. |
Замечания
Лучший способ создания common_view
— использовать views::common
адаптер диапазона. Адаптеры диапазона — это способ создания классов представления. Типы представлений предоставляются в случае, если вы хотите создать собственный тип пользовательского представления.
Это представление полезно для передачи диапазона с различными типами итератора или sentinel в устаревший алгоритм, который ожидает, что они будут одинаковыми.
Требования
Заголовок: <ranges>
(с C++20)
Пространство имен: std::ranges
Параметр компилятора: /std:c++20
или более поздней версии требуется.
Конструкторы
Создайте экземпляр common_view
.
1) common_view() = default;
2) constexpr explicit common_view(V v);
Параметры
v
Базовое представление.
Сведения о типе параметра шаблона см. в разделе "Параметры шаблона".
Замечания
1) По умолчанию создает common_view
объект .
2) Создает объект common_view
из базового представления с помощью std::move(v)
. Ошибка приведет к тому, что V
это общий диапазон, чтобы избежать неправильного использования, что негативно влияет на производительность.
base
Получает копию базового представления.
// Uses a copy constructor to return the underlying view
constexpr V base() const& requires std::copy_constructible<V>;
// Uses a move constructor to return the underlying view
constexpr V base() &&;
begin
Получите итератор к первому элементу.
constexpr auto begin();
constexpr auto begin() const requires range<const V>;
Возвращаемое значение
Итератор, указывающий на первый элемент в представлении:
end
Получите sentinel в конце представления.
constexpr auto end();
constexpr auto end() const requires ranges::range<const V>;
Возвращаемое значение
Sentinel, следующий за последним элементом в представлении:
size
Получение количества элементов в представлении.
constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;
Параметры
Нет.
Возвращаемое значение
Количество элементов в представлении.