Daily bit(e) C++. std::counted_iterator
Добавлено 26 августа 2026 в 13:47
Daily bit(e) C++ 92, адаптер итераторов в C++ с подсчетом элементов: std::counted_iterator.

В стандартной библиотеке лишь немногие алгоритмы предлагают варианты с подсчетом элементов, работающие с использованием итератора 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}
