Namespaces
Variants

std:: counted_iterator

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Определено в заголовочном файле <iterator>
template < std:: input_or_output_iterator I >
class counted_iterator ;
(начиная с C++20)

std::counted_iterator — это адаптер итератора, который ведет себя точно так же, как базовый итератор, за исключением того, что он отслеживает расстояние до конца своего диапазона. Этот итератор равен std::default_sentinel тогда и только тогда, когда его счетчик достигает нуля.

Содержание

Типы членов

Тип члена Определение
iterator_type I
value_type
(условно присутствует)
std:: iter_value_t < I > если I моделирует indirectly_readable ; иначе не определен
difference_type std:: iter_difference_t < I >
iterator_concept
(условно присутствует)
I :: iterator_concept если присутствует; иначе не определен
iterator_category
(условно присутствует)
I :: iterator_category если присутствует; иначе не определен

Объекты-члены

Название члена Определение
current (private) базовый итератор, к которому обращается base()
( объект-член только для демонстрации* )
length (private) расстояние между базовым итератором и концом его диапазона
( объект-член только для демонстрации* )

Функции-члены

создает новый counted_iterator
(public member function)
присваивает другой counted_iterator
(public member function)
получает доступ к базовому итератору
(public member function)
возвращает расстояние до конца
(public member function)
получает доступ к указываемому элементу
(public member function)
получает доступ к элементу по индексу
(public member function)
перемещает вперед или назад counted_iterator
(public member function)

Функции, не являющиеся членами класса

сравнивает расстояния до конца
(шаблон функции)
проверяет, равно ли расстояние до конца ​0​
(шаблон функции)
(C++20)
продвигает итератор
(шаблон функции)
(C++20)
вычисляет расстояние между двумя адаптерами итераторов
(шаблон функции)
вычисляет знаковое расстояние до конца
(шаблон функции)
(C++20)
преобразует результат разыменования базового итератора в соответствующий тип rvalue-ссылки
(функция)
(C++20)
обменивает объекты, на которые указывают два базовых итератора
(шаблон функции)

Вспомогательные классы

предоставляет унифицированный интерфейс к свойствам типа std::counted_iterator
(специализация шаблона класса)

Пример

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
using std::operator""s;
void print(auto const remark, auto const& v)
{
    const auto size = std::ssize(v);
    std::cout << remark << '[' << size << "] { ";
    for (auto it = std::counted_iterator{std::cbegin(v), size};
         it != std::default_sentinel; ++it)
        std::cout << *it << (it.count() > 1 ? ", " : " ");
    std::cout << "}\n";
}
int main()
{
    const auto src = {"Arcturus"s, "Betelgeuse"s, "Canopus"s, "Deneb"s, "Elnath"s};
    print("src", src);
    std::vector<decltype(src)::value_type> dst;
    std::ranges::copy(std::counted_iterator{src.begin(), 3},
                      std::default_sentinel,
                      std::back_inserter(dst));
    print("dst", dst);
}

Вывод:

src[5] { Arcturus, Betelgeuse, Canopus, Deneb, Elnath }
dst[3] { Arcturus, Betelgeuse, Canopus }

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

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

DR Applied to Behavior as published Correct behavior
P2259R1 C++20 member typedefs are not provided std::incrementable_traits
is specialized for counted_iterator
member typedefs are added to account for iterator_traits fix
redundant std::incrementable_traits specialization is removed

Смотрите также

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