std::ranges::copy_backward
Актуально для C++26.
#include <algorithm>
Актуально на 2025-06-30.
Define overload #1
template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2> requires indirectly_copyable<I1, I2> constexpr ranges::copy_backward_result<I1, I2> copy_backward(I1 first, S1 last, I2 result);
Копирует элементы из диапазона [first, last] начиная с last в result.
Example, possible implementation
Define overload #2
template<bidirectional_range R, bidirectional_iterator I> requires indirectly_copyable<iterator_t<R>, I> constexpr ranges::copy_backward_result<borrowed_iterator_t<R>, I> copy_backward(R&& r, I result);
Копирует элементы из конца диапазона r в result.
Example, possible implementation
Параметры
first, last - пара iterator-sentinel указывающих на копируемый диапазон;
r - объект, инкапсулирующий копируемые данные, удовлетворяющий требования концепта bidirectional_range.
result - объект-итератор, удовлетворяющий требования концепта bidirectional_iterator, указывающий на конец результирующего диапазона. Во избежание возможного переполнения буфера, пользователь должен позаботиться о том, чтобы памяти на которую ссылается result, хватило для записи всех элементов.
Возвращаемое значение
Вернёт два итератора {last, result - n}, где n, кол-во элементов в диапазоне.
Examples
Example 1:
#include <iostream> #include <algorithm> #include <vector> namespace ranges = std::ranges; int main() { constexpr char buf[] = {'z','x','c'}; std::vector<char> result(5, '-'); auto [_, out] = ranges::copy_backward(buf, std::end(result)); for (auto c : result) std::cout << c; std::cout << std::endl; for (std::size_t i = 0; i < sizeof(buf); i++) std::cout << out[i]; std::cout << std::endl; }
--zxc zxc
Changelog
C++20
Введён в стандарт.See also
TODO
This page was last modified on 2025-06-30