Поделиться через


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
baseC++20 Получите базовое представление.
beginC++20 Получите итератор к первому элементу в представлении.
endC++20 Получите sentinel в конце представления.
sizeC++20 Получение количества элементов в представлении.
Наследуется от view_interface Description
backC++20 Получите последний элемент.
dataC++20 Получите указатель на первый элемент.
emptyC++20 Проверьте, является ли представление пустым.
frontC++20 Получите первый элемент.
operator[]C++20 Получите элемент в указанной позиции.
operator boolC++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>;

Возвращаемое значение

Итератор, указывающий на первый элемент в представлении:

Изображение вектора с элементами 10, 20 и 30. Первый элемент содержит 10 и помечен как begin(). Последний элемент содержит 30 и помечен как последний элемент. Мнимый прямоугольник после последнего элемента указывает sentinel и обозначает конец().

end

Получите sentinel в конце представления.

constexpr auto end();
constexpr auto end() const requires ranges::range<const V>;

Возвращаемое значение

Sentinel, следующий за последним элементом в представлении:

Изображение вектора с элементами 10, 20 и 30. Первый элемент содержит 10 и помечен как begin(). Последний элемент содержит 30 и помечен как последний элемент. Мнимый прямоугольник после последнего элемента указывает sentinel и обозначает конец().

size

Получение количества элементов в представлении.

constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;

Параметры

Нет.

Возвращаемое значение

Количество элементов в представлении.

См. также

<ranges>
common адаптер диапазона
Классы представления