std::ranges::fill
Von de.cppreference.net
| Definiert im Header <algorithm>
|
||
| Aufrufsignatur |
||
template< class T, std::output_iterator<const T&> O, std::sentinel_for<O> S >
constexpr O fill( O first, S last, const T& value );
|
(1) | (seit C++20) (bis C++26) |
template< class O, std::sentinel_for<O> S, class T = std::iter_value_t<O> >
requires std::output_iterator<O, const T&>
constexpr O fill( O first, S last, const T& value );
|
(seit C++26) | |
template< class T, ranges::output_range<const T&> R >
constexpr ranges::borrowed_iterator_t<R> fill( R&& r, const T& value );
|
(2) | (seit C++20) (bis C++26) |
template< class R, class T = ranges::range_value_t<R> >
requires ranges::output_range<R, const T&>
constexpr ranges::borrowed_iterator_t<R> fill( R&& r, const T& value );
|
(seit C++26) | |
1) Weist den angegebenen
value den Elementen im Bereich [first, last) zu.2) Wie (1), verwendet aber
r als Quellbereich, als ob ranges::begin(r) als first und ranges::end(r) als last verwendet würde.Die auf dieser Seite beschriebenen funktionsähnlichen Entitäten sind Algorithmus-Funktionsobjekte (informell als Niebloids bekannt), das heißt:
- Explizite Vorlagenargumentlisten können beim Aufruf einer von ihnen nicht angegeben werden.
- Keine von ihnen sind für argumentabhängige Namenssuche sichtbar.
- Wenn eine von ihnen durch normale unqualifizierte Namenssuche als Name links vom Funktionsaufrufoperator gefunden wird, wird argumentabhängige Namenssuche unterbunden.
Parameter
| first, last | - | das Iterator-Sentinel-Paar, das den Bereich der zu modifizierenden Elemente definiert |
| r | - | der Bereich der zu modifizierenden Elemente |
| value | - | der zuzuweisende Wert |
Rückgabewert
Ein Ausgabeiterator, der gleich last ist.
Komplexität
Genau last - first Zuweisungen.
Mögliche Implementierung
struct fill_fn
{
template<class O, std::sentinel_for<O> S, class T = std::iter_value_t<O>>
requires std::output_iterator<O, const T&>
constexpr O operator()(O first, S last, const T& value) const
{
while (first != last)
*first++ = value;
return first;
}
template<class R, class T = ranges::range_value_t<R>>
requires ranges::output_range<R, const T&>
constexpr ranges::borrowed_iterator_t<R> operator()(R&& r, const T& value) const
{
return (*this)(ranges::begin(r), ranges::end(r), value);
}
};
inline constexpr fill_fn fill;
|
Anmerkungen
| Feature-Test-Makro | Wert | Std | Merkmal |
|---|---|---|---|
__cpp_lib_algorithm_default_value_type |
202403 |
(C++26) | Initialisierungsliste für Algorithmen (1,2) |
Beispiel
Diesen Code ausführen
#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};
// set all elements to -1 using overload (1)
std::ranges::fill(v.begin(), v.end(), -1);
println(v);
// set all element to 10 using overload (2)
std::ranges::fill(v, 10);
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(nums, {4, 2}); // T gets deduced
#else
std::ranges::fill(nums, std::complex<double>{4, 2});
#endif
println(nums);
}
Ausgabe:
-1 -1 -1 -1 -1 -1
10 10 10 10 10 10
(1,3) (2,2) (4,8)
(4,2) (4,2) (4,2)
Siehe auch
(C++20) |
weist einer Anzahl von Elementen einen Wert zu (Algorithmus-Funktionsobjekt) |
(C++20)(C++20) |
kopiert einen Bereich von Elementen an einen neuen Ort (Algorithmus-Funktionsobjekt) |
(C++20) |
speichert das Ergebnis einer Funktion in einem Bereich (Algorithmus-Funktionsobjekt) |
(C++20) |
wendet eine Funktion auf einen Bereich von Elementen an (Algorithmus-Funktionsobjekt) |
(C++26) |
füllt einen Bereich mit Zufallszahlen aus einem gleichmäßigen Zufallsbitgenerator (Algorithmus-Funktionsobjekt) |
| weist jedem Element in einem Bereich per Kopierzuweisung den gegebenen Wert zu (Funktionsvorlage) |