std::ranges::move
Актуально для C++26.
#include <algorithm>
Актуально на 2025-06-30.
Define overload #1
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O> requires indirectly_movable<I, O> constexpr ranges::move_result<I, O> move(I first, S last, O result);
Перемещает элементы из диапазона [first, last] в result.
Example, possible implementation
Define overload #2
template<input_range R, weakly_incrementable O> requires indirectly_movable<iterator_t<R>, O> constexpr ranges::move_result<borrowed_iterator_t<R>, O> move(R&& r, O result);
Перемещает элементы из диапазона r в result.
Example, possible implementation
Параметры
first, last - пара iterator-sentinel указывающих на перемещаемые данные;
r - объект, инкапсулирующий перемещаемые данные, удовлетворяющий требования концепта input_range.
result - объект-итератор, удовлетворяющий требования концепта weakly_incrementable, указывающий на начало результирующего диапазона. Во избежание переполнения буфера, пользователь должен позаботиться о том, чтобы памяти на которую ссылается result, хватило для записи всех элементов.
Возвращаемое значение
Вернёт два итератора {last, result + N}, где N, кол-во элементов в диапазоне.
Examples
Example 1:
#include <iostream> #include <algorithm> #include <vector> #include <string> namespace ranges = std::ranges; int main() { std::vector<std::string> in{"str1", "str2"}; std::vector<std::string> out; auto [in_, out_] = ranges::move(in, std::back_inserter(out)); std::cout << "in[0]: " << in[0] << std::endl; std::cout << "in[1]: " << in[1] << std::endl; std::cout << "out[0]: " << out[0] << std::endl; std::cout << "out[1]: " << out[1] << std::endl; }
in[0]: in[1]: out[0]: str1 out[1]: str2
Changelog
C++20
Введён в стандарт.See also
TODO
This page was last modified on 2025-06-30