In Range-v3 wird eine Pipeline erstellt, die Elemente eines potenziell unendlichen Bereichs mithilfe einer zurückgegebenen Drittanbieterfunktion transformiert Ein Vektor kann eine Herausforderung darstellen, da keine Ansichten temporärer Container erstellt werden können.
Beachten Sie den folgenden Code:
auto rng = src | view::transform(f) | view::join;
wobei src ein unendlicher Bereich vom Typ T ist und f eine Funktion eines Drittanbieters ist, die einen std::vector
Kürzlich wurden Updates für range-v3 eingeführt Eine Lösung für dieses Problem: der Views::cache1-Operator. Dieser Operator erstellt einen temporären Container, der die Ausgabe einer Transformation speichert und anderen Ansichten in der Pipeline den Zugriff auf ihre Elemente ermöglicht.
Um die gewünschte Pipeline korrekt zu implementieren, fügen Sie „views::cache1“ vor „views::join:
auto rng = src | view::transform(f) | views::cache1 | views::join;
<code class="cpp">auto rng = views::iota(0, 4) | views::transform([](int i) { return std::string(i, char('a' + i)); }) | views::cache1 | views::join('-'); check_equal(rng, {'-', 'b', '-', 'c', 'c', '-', 'd', 'd', 'd'});</code>
Das obige ist der detaillierte Inhalt vonWie kann ich einen unendlichen Bereich mit einer Funktion transformieren, die temporäre Container in Bereich-v3 zurückgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!