@specsoftdev live:.cid.8e17e9b93cabb607 specsoftdev@gmail.com
std::ranges::copy
Актуально для C++26.

#include <algorithm>
Актуально на 2025-06-14.


Define overload #1
template<input_iterator I, sentinel_for<I> S,
         weakly_incrementable O>
requires indirectly_copyable<I, O>
constexpr ranges::copy_result<I, O>
    copy(I first, S last, O result);

Копирует элементы из диапазона [first, last] в "result";
Example, possible implementation
Define overload #2
template<input_range R, weakly_incrementable O>
requires indirectly_copyable<iterator_t<R>, O>
constexpr ranges::copy_result<borrowed_iterator_t<R>, O>
    copy(R&& r, O result);

Копирует элементы из диапазона "r" в "result";
Example, possible implementation

Возвращаемое значение

Вернёт два итератора, смещенных на количество скопированных элементов.



Notes

  • Во избежание возврата из функции итератора ссылающегося на временный объект, будет возвращен объект std::ranges::dangling, если тип "r" не удовлетворяет требования концента ranges::borrowed_range.




Examples


Example 1:
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

namespace ranges = std::ranges;


constexpr auto
fun(ranges::borrowed_range auto&& copyed, ranges::borrowed_range auto&& result)
{
    return ranges::copy(copyed,
                        std::inserter(result, std::begin(result)));
}


int main()
{
    std::string copyed = "abcdef  5";
    std::vector<char> result {'1', '2', '3'};

    copyed.resize(copyed.size()-2);

    auto [in_, _] = fun(copyed, result);

    for (auto c : result)
        std::cout << c;
    std::cout << std::endl;

    std::cout << *++in_ << std::endl;

}



abcdef 123
5






Changelog

C++20
Введён в стандарт.


See also

TODO

This page was last modified on 2025-06-14