Namespaces
Variants

std::ranges:: generate_n

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
Constrained algorithms
All names in this menu belong to namespace std::ranges
Non-modifying sequence operations
Modifying sequence operations
Partitioning operations
Sorting operations
Binary search operations (on sorted ranges)
Set operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Permutation operations
Fold operations
Operations on uninitialized storage
Return types
Definiert im Header <algorithm>
Aufrufsignatur
template < std:: input_or_output_iterator O, std:: copy_constructible F >

erfordert std:: invocable < F & > && std:: indirectly_writable < O, std:: invoke_result_t < F & >>
constexpr O

generate_n ( O first, std:: iter_difference_t < O > n, F gen ) ;
(seit C++20)

Weist das Ergebnis aufeinanderfolgender Aufrufe des Funktionsobjekts gen jedem Element im Bereich [ first , first + n ) zu, falls 0 < n . Andernfalls tut es nichts.

Die auf dieser Seite beschriebenen funktionsähnlichen Entitäten sind Algorithm Function Objects (informell bekannt als Niebloids ), das heißt:

Inhaltsverzeichnis

Parameter

first - der Anfang des Bereichs der zu ändernden Elemente
n - Anzahl der zu ändernden Elemente
gen - das Generatorfunktionsobjekt

Rückgabewert

Iterator ein Element nach dem letzten zugewiesenen Element, falls 0 < count , first andernfalls.

Komplexität

Genau n Aufrufe von gen ( ) und Zuweisungen.

Mögliche Implementierung

struct generate_n_fn
{
    template<std::input_or_output_iterator O, std::copy_constructible F>
    requires std::invocable<F&> && std::indirectly_writable<O, std::invoke_result_t<F&>>
    constexpr O operator()(O first, std::iter_difference_t<O> n, F gen) const
    {
        for (; n-- > 0; *first = std::invoke(gen), ++first)
        {}
        return first;
    }
};
inline constexpr generate_n_fn generate_n {};
**Hinweis:** Da der gesamte Inhalt innerhalb von `
`-Tags liegt und C++-spezifische Begriffe enthält, wurde gemäß den Anweisungen keine Übersetzung durchgeführt. Der Code bleibt vollständig unverändert.

Beispiel

#include <algorithm>
#include <array>
#include <iostream>
#include <random>
#include <string_view>
auto dice()
{
    static std::uniform_int_distribution<int> distr {1, 6};
    static std::random_device engine;
    static std::mt19937 noise {engine()};
    return distr(noise);
}
void print(const auto& v, std::string_view comment)
{
    for (int i : v)
        std::cout << i << ' ';
    std::cout << '(' << comment << ")\n";
}
int main()
{
    std::array<int, 8> v;
    std::ranges::generate_n(v.begin(), v.size(), dice);
    print(v, "dice");
    std::ranges::generate_n(v.begin(), v.size(), [n {0}] mutable { return n++; });
    // gleicher Effekt wie std::iota(v.begin(), v.end(), 0);
    print(v, "iota");
}

Mögliche Ausgabe:

5 5 2 2 6 6 3 5 (dice)
0 1 2 3 4 5 6 7 (iota)

Siehe auch

speichert das Ergebnis einer Funktion in einem Bereich
(Algorithmus-Funktionsobjekt)
füllt einen Bereich mit Zufallszahlen aus einem gleichverteilten Zufallsbitgenerator
(Algorithmus-Funktionsobjekt)
weist einem Bereich von Elementen einen bestimmten Wert zu
(Algorithmus-Funktionsobjekt)
weist einer Anzahl von Elementen einen Wert zu
(Algorithmus-Funktionsobjekt)
wendet eine Funktion auf einen Bereich von Elementen an
(Algorithmus-Funktionsobjekt)
weist die Ergebnisse aufeinanderfolgender Funktionsaufrufe N Elementen in einem Bereich zu
(Funktionstemplate)