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