Daily bit(e) C++. std::counted_iterator

Добавлено 26 августа 2026 в 13:47

Daily bit(e) C++ 92, адаптер итераторов в C++ с подсчетом элементов: std::counted_iterator.

Daily bit(e) C++

В стандартной библиотеке лишь немногие алгоритмы предлагают варианты с подсчетом элементов, работающие с использованием итератора begin и количества элементов.

В C++20 был представлен адаптер std::counted_iterator, который может превратить любую версию алгоритма для диапазонов в вариант с подсчетом элементов.

#include <algorithm>
#include <vector>
#include <iterator>

std::vector<int> data{1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

std::vector<int> out1;
// Вариант std::copy с подсчетом элементов.
std::copy_n(data.begin(), 5, std::back_inserter(out1));
// out1 == {1, 2, 3, 4, 5}

std::vector<int> out2;
std::ranges::copy(
    // Адаптирование итератора и указание количества элементов.
    std::counted_iterator(data.begin(), 5), 
    // counted_iterator == default_sentinel, если счетчик равен нулю
    std::default_sentinel,
    std::back_inserter(out2));
// out2 == {1, 2, 3, 4, 5}

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование