„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich Range Pipelines mit temporären Containern nutzen?

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

Veröffentlicht am 12.11.2024
Durchsuche:861

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 Vektor ist es wichtig, eine Pipeline zu erstellen, die diese Funktion allen Elementen des Bereichs zuordnet und alle resultierenden Vektoren mit all ihren Elementen in einem einzigen Bereich zusammenfasst Elemente.

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

auto rng = src | view::transform(f) | view::join;

Dieser Ansatz war bisher jedoch nicht durchführbar, da es unmöglich ist, Ansichten von temporären Containern wie den von f erstellten 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 ist:

auto rng = views::iota(0, 4)
        | views::transform([](int i) { return std::string(i, char('a'   i)); })
        | views::cache1
        | views::join('-');

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

Für das in beschriebene Problem Die Frage, die Lösung wäre, die Pipeline wie folgt zu ändern:

auto rng = src | views::transform(f) | views::cache1 | views::join;
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3