Heim > Artikel > Backend-Entwicklung > Wie kann ich einen unendlichen Bereich mit einer Funktion transformieren, die temporäre Container in Bereich-v3 zurückgibt?
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;CodebeispielDas folgende Codebeispiel demonstriert die Verwendung von view::cache1 in der Praxis:
<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>BereichseigenschaftenEs ist wichtig Beachten Sie, dass der transformierte Bereich rng nicht alle Bereichseigenschaften seines Quellbereichs beibehält. Im obigen Beispiel geht das Forward-Range-Konzept aufgrund der Erstellung temporärer Container verloren.
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!