iota_view
class (стандартная библиотека C++)
Создает представление последовательности элементов путем многократного увеличения начального значения. Последовательность может быть привязана или несвязана.
Синтаксис
template<std::weakly_incrementable W, std::semiregular Bound = std::unreachable_sentinel_t>
requires __WeaklyEqualityComparableWith<W, Bound> && std::copyable<W>
class iota_view : public ranges::view_interface<iota_view<W, Bound>>;
Параметры шаблона
W
Тип значений в последовательности. Указанный тип должен поддерживаться operator++
.
Bound
Тип конечного значения. Если Bound
значение равно std::unreachable_sentinel_t
(значение по умолчанию), то представление не подключено.
Просмотр характеристик
Описание следующих записей см. в разделе "Просмотр характеристик класса"
Characteristic | Description |
---|---|
Адаптер диапазона | views::iota |
Базовый диапазон | Неприменимо, так как это представление создает его элементы |
Тип элемента | То же, что и параметр шаблона W |
Просмотр категории итератора | Поддерживает input_range до random_access_range , в зависимости от типа W |
Размер | Только если диапазон имеет конечное значение, то есть это не бесконечный ряд |
Is const -iterable |
Да |
Общий диапазон | Только в том случае, если Bound тот же тип, что и W |
Заимствуемый диапазон | Да |
Участники
Функции-члены | Description |
---|---|
Конструкторы C++20 | Создайте представление. |
begin C++20 |
Получите итератор к первому элементу. |
end C++20 |
Получите sentinel в конце представления. |
size C++20 |
Получение количества элементов. |
Наследуется от view_interface |
Description |
back C++20 |
Получите последний элемент. |
empty C++20 |
Проверьте, является ли представление пустым. |
front C++20 |
Получите первый элемент. |
operator[] C++20 |
Получите элемент в указанной позиции. |
operator bool C++20 |
Проверьте, не является ли представление пустым. |
Замечания
Хорошим способом создания iota_view
является использование адаптера iota
диапазона. Адаптеры диапазона — это способ создания классов представления. Типы представлений предоставляются в случае, если вы хотите создать собственный тип пользовательского представления.
Последовательность значений может быть целочисленной, например 1,2,3 или "a", "b", "c" или последовательных элементов из диапазона.
Обычно это представление используется для итерации по ряду значений. Например:
for (int i : iota_view{1, 10}) // iterate over a view of the integers 1 through 9
{
std::cout << i << ' '; // 1 2 3 4 5 6 7 8 9
}
Требования
Заголовок: <ranges>
(с C++20)
Пространство имен: std::ranges
Параметр компилятора: /std:c++20
или более поздней версии требуется.
Конструкторы
Создание экземпляра iota_view
объекта .
1) iota_view() requires std::default_initializable<W> = default;
2) constexpr explicit iota_view(W value);
3) constexpr iota_view(std::type_identity_t<W> value, std::type_identity_t<Bound> bound);
4) constexpr iota_view( /*iterator*/ first, /*sentinel*/ last );
Параметры
value
Начальное значение для ряда.
bound
Граница ряда. Это одно больше последнего значения в серии.
Сведения о типе параметра шаблона см. в разделе "Параметры шаблона".
Замечания
1) Создание iota_view
начального и конечного значения, определенного типом W
шаблона, инициализированного по умолчанию.
2) Создание iota_view
с указанным начальным значением и конечным значением, определенным типом, инициализированным W
значением.
3) Создайте привязанное iota_view
с указанным начальным значением и конечным значением. Конечное значение меньше последнего указанного значения.
4) Используется для создания подвидов. Например, std::ranges::iota_view(start, end);
где start
итераторы end
находятся в начале и конце подвидения.
Вместо того чтобы напрямую создать этот класс, простой способ создать его iota_view
с помощью адаптера iota
диапазона. Адаптеры диапазона — это способ создания классов представления. Типы представлений предоставляются в случае, если вы хотите создать собственный тип пользовательского представления.
Если тип привязки имеет unreachable_sentinel_t
тип, итоговая представление привязана.
При использовании одного из конструкторов, которые инициализирует привязку, привязка будет инициализирована по умолчанию для этого типа. Например, является пустым диапазономint
, iota_view<int, int>{}
так как значение, созданное по умолчанию, и привязка являются обоими0
. Кроме того, это -4, -3, -2, -1
связано с тем, что привязка, созданная int
по умолчанию, iota_view<int, int>{-4}
является 0
.
iota_view
Пример конструктора
// requires /std:c++20, or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::ranges::iota_view<int> iv; // create an iota_view with an unbounded range, starting at 0
std::ranges::iota_view<int> iv2(5); // create an iota_view with an unbounded range, starting at 5.
std::ranges::iota_view<int, int> iv3{5, 10}; // create an iota_view with a bounded range, starting at 5 and ending at 9
std::vector<int> v{10, 20, 35, 45, 50, 66, 77, 82, 90, 100};
auto start = std::ranges::find(v, 35);
auto end = std::ranges::find(v, 82);
for (auto &&val : std::ranges::iota_view(start, end))
{
std::cout << *val << ' '; // outputs 35 45 50 66 77
}
}
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>;
Параметры
Нет.
Возвращаемое значение
Если объект iota_view
не связан, возвращается std::unreachable_sentinel
.
iota_view
Если граница ограничена, возвращает итератор, указывающий на sentinel после последнего значения в последовательности.
size
Получение количества элементов в представлении. Должен iota_view
быть привязан.
constexpr auto size() requires
(same_as<W, Bound> && advanceable <W>) ||
(integral<W> && integral<Bound>) ||
sized_sentinel_for<Bound, W>;
Параметры
Нет.
Возвращаемое значение
Число элементов в массиве iota_view
.
Замечания
Не удается вызвать size()
несвязанный iota_view
.
См. также
<ranges>
iota()
адаптер диапазона
std::numerics::iota
Классы представления