@specsoftdev live:.cid.8e17e9b93cabb607 specsoftdev@gmail.com
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