Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich Range Pipelines mit temporären Containern nutzen?

Wie kann ich Range Pipelines mit temporären Containern nutzen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-02 15:58:03155Durchsuche

How Can I Use Range Pipelines with Temporary Containers?

Range-Pipelines mit temporären Containern schreiben

In Range-v3, wenn mit einer Pipeline gearbeitet wird, die eine Drittanbieterfunktion verwendet, die a zurückgibt Für einen Vektor ist es wichtig, eine Pipeline zu erstellen, die diese Funktion allen Elementen des Bereichs zuordnet und alle resultierenden Vektoren mit all ihren Elementen zu einem einzigen Bereich zusammenfasst.

Zunächst könnte man versuchen, eine solche Pipeline zu schreiben als:

<code class="cpp">auto rng = src | view::transform(f) | view::join;</code>

Dieser Ansatz war bisher jedoch nicht durchführbar, da es unmöglich ist, Ansichten von temporären Containern wie denen von f zu erstellen.

Um dieses Problem zu beheben, wurde ein Patch erstellt eingeführt, die es nun ermöglicht, solche Range-Pipelines korrekt zu schreiben. Der Schlüssel besteht darin, den Operator „views::cache1“ in die Pipeline einzufügen, wie im folgenden Beispiel zu sehen:

<code class="cpp">auto rng = views::iota(0, 4)
        | views::transform([](int i) { return std::string(i, char('a' + i)); })
        | views::cache1
        | views::join('-');</code>

Dadurch wird sichergestellt, dass die Pipeline die temporären Container korrekt verarbeitet, sodass wir Bereichspipelines schreiben können, die sie verwenden temporäre Container effektiv zu nutzen.

Für das in der Frage beschriebene Problem bestünde die Lösung darin, die Pipeline wie folgt zu modifizieren:

<code class="cpp">auto rng = src | views::transform(f) | views::cache1 | views::join;</code>

Das obige ist der detaillierte Inhalt vonWie kann ich Range Pipelines mit temporären Containern nutzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn