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;
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