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