Ежедневный бит (е) C++ # 92, Адаптер итератора C++ со счетчиком: std:: counted_iterator

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

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;
// A counted variant of 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(
    // Adapt iterator, and specify number of elements.
    std::counted_iterator(data.begin(), 5), 
    // counted_iterator == default_sentinel if count is zero
    std::default_sentinel,
    std::back_inserter(out2));
// out2 == {1, 2, 3, 4, 5}

Откройте пример в Compiler Explorer.