std::fill
De es.cppreference.net
| Definido en el encabezado <algorithm>
|
||
template< class ForwardIt, class T >
void fill( ForwardIt first, ForwardIt last, const T& value );
|
(1) | (hasta C++26) (constexpr desde C++20) |
template< class ForwardIt, class T = typename std::iterator_traits
<ForwardIt>::value_type >
constexpr void fill( ForwardIt first, ForwardIt last,
const T& value );
|
(desde C++26) | |
template< class ExecutionPolicy, class ForwardIt, class T >
void fill( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last, const T& value );
|
(2) | (desde C++17) (hasta C++26) |
template< class ExecutionPolicy,
class ForwardIt, class T = typename std::iterator_traits
<ForwardIt>::value_type >
void fill( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last, const T& value );
|
(desde C++26) | |
1) Asigna el
value dado a todos los elementos del rango [first, last).2) Igual que (1), pero ejecutado según
policy. Esta sobrecarga participa en la resolución de sobrecarga solo si el valor de la siguiente expresión es
true:
|
|
(hasta C++20) |
|
|
(desde C++20) |
Si value no es escribible en first, el programa está mal formado.
Parámetros
| first, last | - | el par de iteradores que definen el rango de elementos a modificar |
| value | - | el valor a asignar |
| policy | - | la política de ejecución a usar |
| Requisitos de tipo | ||
-ForwardIt debe cumplir los requisitos de LegacyForwardIterator.
| ||
Complejidad
Exactamente std::distance(first, last) asignaciones.
Excepciones
La sobrecarga con un parámetro de plantilla llamado ExecutionPolicy informa errores de la siguiente manera:
- Si la ejecución de una función invocada como parte del algoritmo lanza una excepción y
ExecutionPolicyes una de las políticas estándar, se llama a std::terminate. Para cualquier otroExecutionPolicy, el comportamiento está definido por la implementación. - Si el algoritmo falla al asignar memoria, se lanza std::bad_alloc.
Posible implementación
| fill (1) |
|---|
template<class ForwardIt,
class T = typename std::iterator_traits<ForwardIt>::value_type>
void fill(ForwardIt first, ForwardIt last, const T& value)
{
for (; first != last; ++first)
*first = value;
}
|
Notas
| Macro de prueba de característica | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_algorithm_default_value_type |
202403 |
(C++26) | Inicialización de lista para algoritmos (1,2) |
Ejemplo
Ejecutar este código
#include <algorithm>
#include <complex>
#include <iostream>
#include <vector>
void println(const auto& seq)
{
for (const auto& e : seq)
std::cout << e << ' ';
std::cout << '\n';
}
int main()
{
std::vector<int> v{0, 1, 2, 3, 4, 5, 6, 7, 8};
println(v);
// set all of the elements to 8
std::fill(v.begin(), v.end(), 8);
println(v);
std::vector<std::complex<double>> nums{{1, 3}, {2, 2}, {4, 8}};
println(nums);
#ifdef __cpp_lib_algorithm_default_value_type
std::fill(nums.begin(), nums.end(), {4, 2});
#else
std::fill(nums.begin(), nums.end(), std::complex<double>{4, 2});
#endif
println(nums);
}
Salida:
0 1 2 3 4 5 6 7 8
8 8 8 8 8 8 8 8 8
(1,3) (2,2) (4,8)
(4,2) (4,2) (4,2)
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a estándares C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento como se publicó | Comportamiento correcto |
|---|---|---|---|
| LWG 283 | C++98 | T se requería que fuera CopyAssignable, peroT no siempre es escribible a ForwardIt
|
se requirió que fuera escribible en su lugar |
Véase también
| asigna por copia el valor dado a N elementos en un rango (plantilla de función & objeto función de algoritmo) | |
(C++20) |
|
(C++11) |
copia un rango de elementos a una nueva ubicación (plantilla de función & objeto función de algoritmo) |
(C++20)(C++20) |
|
| asigna los resultados de llamadas sucesivas a funciones a cada elemento en un rango (plantilla de función & objeto función de algoritmo) | |
(C++20) |
|
| aplica una función a un rango de elementos, almacenando los resultados en un rango de destino (plantilla de función & objeto función de algoritmo) | |
(C++20) |
|
(C++20) |
asigna un valor determinado a un rango de elementos (objeto función de algoritmo) |