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 |
base C++20 |
Получите ссылку на базовый диапазон. |
begin C++20 |
Получите итератор к первому элементу. |
data C++20 |
Получите указатель на первый элемент в указанном диапазоне. |
empty C++20 |
Проверьте, является ли это ref_view пустым. |
end C++20 |
Получите sentinel в конце этого ref_view . |
size C++20 |
Получение количества элементов. Базовый диапазон должен удовлетворять sized_range . |
Наследуется от view_interface |
Description |
back C++20 |
Получите последний элемент. |
front C++20 |
Получите первый элемент. |
operator[] C++20 |
Получите элемент в указанной позиции. |
operator bool C++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
элемента.
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
size
Получение количества элементов.
constexpr auto size() const requires sized_range<R>
Параметры
Нет.
Возвращаемое значение
Число элементов в массиве ref_view
.