std::ranges::fill_n
De es.cppreference.net
| Definido en el encabezado <algorithm>
|
||
| Firma de llamada |
||
template< class T, std::output_iterator<const T&> O >
constexpr O fill_n( O first, std::iter_difference_t<O> n, const T& value );
|
(desde C++20) (hasta C++26) |
|
template< class O, class T = std::iter_value_t<O> >
requires std::output_iterator<O, const T&>
constexpr O fill_n( O first, std::iter_difference_t<O> n, const T& value );
|
(desde C++26) | |
Asigna el value dado a todos los elementos en el rango [first, first + n).
Las entidades similares a funciones descritas en esta página son objetos de función de algoritmo (conocidos informalmente como niebloids), es decir:
- Las listas de argumentos de plantilla explícitas no se pueden especificar al llamar a ninguna de ellas.
- Ninguna de ellas es visible para la búsqueda dependiente de argumentos.
- Cuando alguna de ellas se encuentra mediante búsqueda no calificada normal como el nombre a la izquierda del operador de llamada a función, la búsqueda dependiente de argumentos se inhibe.
Parámetros
| first | - | el inicio del rango de elementos a modificar |
| n | - | número de elementos a modificar |
| value | - | el valor a asignar |
Valor de retorno
Un iterador de salida que se compara igual a first + n .
Complejidad
Exactamente n asignaciones.
Implementación posible
struct fill_n_fn { template<class O, class T = std::iter_value_t<O>> requires std::output_iterator<O, const T&> constexpr O operator()(O first, std::iter_difference_t<O> n, const T& value) const { for (std::iter_difference_t<O> i {}; i != n; ++first, ++i) *first = value; return first; } }; inline constexpr fill_n_fn fill_n {}; |
Notas
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_algorithm_default_value_type
|
202403
|
(C++26) | Inicialización por lista para algoritmos |
Ejemplo
Ejecutar este código
#include <algorithm> #include <complex> #include <iostream> #include <string> #include <vector> void println(const auto& v) { for (const auto& elem : v) std::cout << ' ' << elem; std::cout << '\n'; } int main() { constexpr auto n{8}; std::vector<std::string> v(n, "▓▓░░"); println(v); std::ranges::fill_n(v.begin(), n, "░░▓▓"); println(v); std::vector<std::complex<double>> nums{{1, 3}, {2, 2}, {4, 8}}; println(nums); #ifdef __cpp_lib_algorithm_default_value_type std::ranges::fill_n(nums.begin(), 2, {4, 2}); #else std::ranges::fill_n(nums.begin(), 2, std::complex<double>{4, 2}); #endif println(nums); }
Salida:
▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ (1,3) (2,2) (4,8) (4,2) (4,2) (4,8)
Véase también
|
(C++20)
|
asigna un valor determinado a un rango de elementos
(objeto función de algoritmo) |
|
(C++20)
|
copia un número de elementos a una nueva ubicación
(objeto función de algoritmo) |
|
(C++20)
|
guarda el resultado de una función en un rango
(objeto función de algoritmo) |
|
(C++20)
|
aplica una función a un rango de elementos
(objeto función de algoritmo) |
|
(C++26)
|
llena un rango con números aleatorios de un generador uniforme de bits aleatorios
(objeto función de algoritmo) |
|
asigna por copia el valor dado a N elementos en un rango
(plantilla de función) |