Ежедневный бит (е) 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}