Heim > Backend-Entwicklung > C++ > Hauptteil

Wie kann ich von einer Funktion zurückgegebene Vektoren mithilfe von Range-V3-Pipelines reduzieren?

Patricia Arquette
Freigeben: 2024-11-01 06:28:30
Original
820 Leute haben es durchsucht

How Can I Flatten Vectors Returned from a Function Using Range-V3 Pipelines?

Range-Pipelining mit temporären Containern unter Verwendung von Range-V3

Problem:

Sie haben ein Bereich von Elementen (src) und eine Drittanbieterfunktion (f), die ein Element des Bereichs als Eingabe verwendet und einen Vektor zurückgibt. Sie möchten jedes Element im Bereich mit f transformieren und die resultierenden Vektoren in einen einzigen Bereich reduzieren. Die direkte Verwendung von view::transform und view::join funktioniert jedoch nicht, da keine Ansichten für temporäre Container erstellt werden können.

Lösung:

Zur Unterstützung solcher Pipelines , range-v3 führt den Views::cache1-Operator ein. Mit diesem Operator können Sie die Ergebnisse einer Ansicht in einem temporären Container speichern und dann eine Ansicht dieses Containers erstellen. Durch Einschließen von „views::cache1“ in die Pipeline können Sie eine Ansicht der abgeflachten Vektoren erstellen:

auto rng = src | views::transform(f) | views::cache1 | views::join;
Nach dem Login kopieren

Codebeispiel:

Das folgende Codebeispiel zeigt, wie um „views::cache1“ zu verwenden, um eine Bereichspipeline zu erstellen, die Elemente aus einem Bereich transformiert und reduziert:

<code class="cpp">#include <range/v3/view.hpp>
#include <range/v3/algorithm.hpp>
#include <vector>

std::vector<std::string> f(int i) {
  return std::vector<std::string>(i, char('a' + i));
}

int main() {
  auto rng = views::iota(0, 4)
        | views::transform([](int i) { return f(i); })
        | views::cache1
        | views::join('-');
  
  check_equal(rng, {'-', 'b', '-', 'c', 'c', '-', 'd', 'd', 'd'});
  
  CPP_assert(input_range<decltype(rng)>);
  CPP_assert(!range<const decltype(rng)>);
  CPP_assert(!forward_range<decltype(rng)>);
  CPP_assert(!common_range<decltype(rng)>);

  return 0;
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich von einer Funktion zurückgegebene Vektoren mithilfe von Range-V3-Pipelines reduzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!