Namespaces
Variants

std::ranges::views:: counted

From cppreference.net
Ranges library
Range adaptors
Определено в заголовочном файле <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)

Подсчитываемое представление предоставляет 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
(шаблон класса)
адаптер итератора, отслеживающий расстояние до конца диапазона
(шаблон класса)
возвращает количество элементов, удовлетворяющих определенным критериям
(функциональный объект алгоритма)