std::ranges::uninitialized_copy, std::ranges::uninitialized_copy_result
De cppreference.com
Definido en el archivo de encabezado <memory>
|
||
Signatura de la llamada |
||
template< std::input_iterator I, std::sentinel_for<I> S1, no-throw-forward-iterator O, no-throw-sentinel-for<O> S2 > |
(1) | (desde C++20) |
template< ranges::input_range IR, no-throw-forward-range OR > requires std::constructible_from<ranges::range_value_t<OR>, |
(2) | (desde C++20) |
Tipos auxiliares |
||
template<class I, class O> using uninitialized_copy_result = ranges::in_out_result<I, O>; |
(3) | (desde C++20) |
1) Sea N ranges::min(ranges::distance(ifirst, ilast), ranges::distance(ofirst, olast)), construye N elementos en el rango de salida
[ofirst, olast)
, que es un área de memoria no inicializada, de los elementos en el rango de entrada [ifirst, ilast)
. Los rangos de entrada y salida no deben superponerse.
Si se lanza una excepción durante la inicialización, los objetos ya construidos se destruyen en un orden no especificado.
La función tiene el efecto igual a:
for (; !(ifirst == ilast || ofirst == olast); ++ofirst, ++ifirst) { ::new (const_cast<void*>(static_cast<const volatile void*>(std::addressof(*ofirst)))) std::remove_reference_t<std::iter_reference_t<O>>(*ifirst); }
2) Igual que (1), pero usa
in_range
como primer rango y out_range
como segundo rango, como si usara ranges::begin(in_range) como ifirst
, ranges::end(in_range) como ilast
, ranges::begin(out_range) como ofirst
, y