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


ref_view class (стандартная библиотека C++)

Представление, ссылающееся на элементы, принадлежащие другому диапазону.

Синтаксис

template<std::ranges::range R>
    requires std::is_object_v<R>
class ref_view : public ranges::view_interface<ref_view<R>>;

Параметры шаблона

R
Диапазон для ссылки.

Участники

Функции-члены Description
КонструкторыC++20 Создайте ref_view
baseC++20 Получите ссылку на базовый диапазон.
beginC++20 Получите итератор к первому элементу.
dataC++20 Получите указатель на первый элемент в указанном диапазоне.
emptyC++20 Проверьте, является ли это ref_view пустым.
endC++20 Получите sentinel в конце этого ref_view.
sizeC++20 Получение количества элементов. Базовый диапазон должен удовлетворять sized_range.
Наследуется от view_interface Description
backC++20 Получите последний элемент.
frontC++20 Получите первый элемент.
operator[]C++20 Получите элемент в указанной позиции.
operator boolC++20 Проверьте, не является ли это ref_view пустым.

Просмотр характеристик

Описание следующих записей см. в разделе "Просмотр характеристик класса"

Characteristic Description
Адаптер диапазона views::all или views::common
Базовый диапазон Должно удовлетворять input_range
Тип элемента Совпадает с базовым диапазоном
Просмотр категории итератора Совпадает с базовым диапазоном
Размер Только если базовый диапазон удовлетворяет sized_range
Is const-iterable Да
Общий диапазон Только если базовый диапазон удовлетворяет common_range
Заимствуемый диапазон Да

Требования

Заголовок: <ranges> (с C++20)

Пространство имен: std::ranges

Параметр компилятора: /std:c++20 или более поздней версии требуется.

Конструкторы

Создание экземпляра объекта ref_view

// construct a ref_view from a range
template<different-from<ref_view> R>
constexpr ref_view(R&& rg);

Параметры

rg
Диапазон для ссылки.

Сведения о типе параметра шаблона см. в разделе "Параметры шаблона".

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

Экземпляр класса ref_view.

Замечания

Лучший способ создания ref_view — использовать views::all адаптер диапазона. Адаптеры диапазона — это способ создания классов представления. Типы представлений предоставляются в случае, если вы хотите создать собственный тип пользовательского представления.

Это ref_view полезно для преобразования контейнера в представление. Например, можно использовать ref_view для преобразования vector представления, что делает его недорогим для передачи элементов вектора вокруг.

Пример: ref_view

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v = {1,2,3};
    auto refView = std::views::all(v);
    std::cout << &refView[1] << " : " << &v[1]; // outputs two identical memory addresses, e.g. 00000239AFAFDF90 : 00000239AFAFDF90
    refView[0] = 10; // modifies v[0]
    std::cout << "\n" << v[0]; // 10
}
00000239AFAFDF90 : 00000239AFAFDF90
10

base

Возвращает копию базового диапазона.

constexpr R& base() const;

Параметры

Нет.

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

Базовый диапазон.

begin

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

constexpr iterator_t<R> begin() const;

Параметры

Нет.

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

Итератор, указывающий на первый элемент этого ref_viewэлемента.

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

data

Получите указатель на первый элемент этого ref_viewэлемента. Элементы в диапазоне должны быть смежными.

constexpr auto data() const requires contiguous_range<R>;

Параметры

Нет.

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

Указатель на первый элемент.

empty

Проверьте, является ли это ref_view пустым.

constexpr bool empty() const

Параметры

Нет.

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

Возвращает, true если элемент ref_view не содержит элементов. В противном случае — false.

end

Получите sentinel в конце этого ref_view.

constexpr sentinel_t<R> end() const

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

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

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

size

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

constexpr auto size() const requires sized_range<R>

Параметры

Нет.

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

Число элементов в массиве ref_view.

См. также

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