Namespaces
Variants

std::ranges::views::counted

С сайта ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
Определён в заголовке <ranges>
inline constexpr /* unspecified */ counted = /* unspecified */;
(начиная с C++20)
Сигнатура вызова
template< class Iterator, class DifferenceType >
    requires /* see below */
constexpr /*span-or-subrange*/ counted( Iterator&& it, DifferenceType&& count );
(начиная с C++20)

Представление counted представляет собой view элементов счётного диапазона [i, n) для некоторого итератора i и неотрицательного целого n.

Счётный диапазон [i, n) — это n элементов, начиная с элемента, на который указывает i, и до (но не включая) элемента, на который указывает результат n применений ++i.

Если n == 0, счётный диапазон допустим и пуст. В противном случае счётный диапазон допустим, только если n положительно, i поддерживает разыменование и [++i, --n) является допустимым счётным диапазоном.

Формально, если it и count являются выражениями, T это std::decay_t<decltype((it))>, и D это std::iter_difference_t<T>, тогда

если T моделирует input_or_output_iterator и decltype((count)) моделирует std::convertible_to<D>,
В противном случае views::counted(it, count) некорректно.

Объекты точек настройки

Имя views::counted обозначает объект точки настройки, который представляет собой константный функциональный объект литерального semiregular типа класса. Дополнительные сведения см. в CustomizationPointObject.

Примечания

views::counted не проверяет, достаточно ли длины диапазона для предоставления всех count элементов: используйте views::take, если такая проверка необходима.

Пример

#include <iostream>
#include <ranges>

int main()
{
    const int a[]{1, 2, 3, 4, 5, 6, 7};
    for (int i : std::views::counted(a, 3))
        std::cout << i << ' ';
    std::cout << '\n';

    const auto il = {1, 2, 3, 4, 5};
    for (int i : std::views::counted(il.begin() + 1, 3))
        std::cout << i << ' ';
    std::cout << '\n';
}

Вывод:

1 2 3
2 3 4

Отчёты о дефектах

Следующие отчёты о дефектах, изменяющих поведение, были применены ретроспективно к ранее опубликованным стандартам C++.

DR Применено к Поведение в опубликованной версии Корректное поведение
P2393R1 C++20 неявное преобразование из целочисленного типа класса в std::size_t могло быть недопустимым сделано явным

См. также

view, состоящее из первых N элементов другого view
(шаблон класса) (объект адаптера диапазона)
объединяет пару итератор-дозорный в view
(шаблон класса)
адаптер итератора, который отслеживает расстояние до конца диапазона
(шаблон класса)
возвращает количество элементов, удовлетворяющих определённым критериям
(алгоритмический функциональный объект)