namespace cpp

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:include:ranges

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte Überarbeitung Beide Seiten der Revision
kennen:include:ranges [2020-06-01 18:03]
rrichter [<ranges>]
kennen:include:ranges [2020-07-08 18:10]
rrichter [Sichten]
Zeile 1: Zeile 1:
 ====== <ranges> ====== ====== <ranges> ======
- +Bereiche (ab [[..:begriffe#C++20]]) sind Elementfolgen, auf die ''%%begin(r)%%'' und ''%%end(r)%%'' anwendbar sind. 
-Views lassen sich über Pipes ''|'' aneinander koppeln und liefern die Werte eines Bereiches einzeln auf Anforderung.+Im Namensraum ''std::ranges::views'' oder kurz ''std::views''  
 +definierte Sichten auf Bereiche lassen sich über Pipes ''|'' aneinander koppeln.  
 +Sie liefern die Werte eines Bereiches einzeln auf Anforderung.
  
 <code cpp views_pipelines.cpp> <code cpp views_pipelines.cpp>
Zeile 40: Zeile 42:
 } }
 </code> </code>
-==== Beispiel ====+ 
 +===== Fabriken ===== 
 +erzeugen Bereiche. 
 + 
 +| ''empty'' | leerer Bereich | 
 +| ''single(value)''| Bereich mit nur einem Wert |  
 +| ''iota(start)''| (unendlicher) Bereich mit Werten beginnend bei ''start'', zählt mit ''++'' hoch |  
 +| ''iota(start, end)''| Zählbereich mit Werten, endet vor ''end'' |  
 +| ''ranges::istream_view<T>(istream)'' | liest Werte vom Typ ''T'' aus dem Eingabestrom ''istream''
 + 
 +<code cpp istream_view.cpp> 
 +#include <iostream> 
 +#include <ranges> 
 +#include <string> 
 +#include <sstream> 
 + 
 +int main() 
 +
 +  auto input = std::istringstream{"0 1 2 3 4 5 6 7 8 9"}; 
 +  auto below_5 = std::ranges::istream_view<int>(input)  
 +    | std::views::take_while([](auto x) { return x < 5; });  
 + 
 +  for (auto e : below_5) std::cout << e << ' '; 
 +
 +</code> 
 + 
 +===== Sichten ===== 
 +übernehmen einen Bereich, verarbeiten dessen Elemente ''e'' und geben sie weiter. 
 + 
 +| ''all'' | gibt alle Elemente weiter | 
 +| ''common'' | erzeugt Bereich, bei dem ''%%begin(r)%%'' und ''%%end(r)%%'' den selben Typ haben | 
 +| ''counted(iter, n)'' | liefert ''n'' Werte, beginnend mit Iterator ''iter''
 +| ''drop(n)'' | überspringt die ersten ''n'' Elemente | 
 +| ''drop_while(pred)'' | überspringt Elemente, solange ''pred(e)'' erfüllt ist | 
 +| ''filter(pred)'' | gibt nur die Elemente weiter, für die ''pred(e)'' erfüllt ist | 
 +| ''reverse'' | kehrt Reihenfolge der Elemente um | 
 +| ''take(n)'' | gibt nur die ersten ''n'' Elemente weiter | 
 +| ''take_while(pred)'' | gibt Elemente nur solange weiter, wie ''pred(e)'' erfüllt ist | 
 +| ''transform(f)'' | wendet ''f'' auf jedes Element ''e'' an, gibt ''f(e)'' weiter 
 +| | | 
 +| ''join'' | wandelt einen Bereich von Bereichen in einen "flachen" Bereich um | 
 +| ''split(delim)'' | erzeugt einen Bereich von Teilbereichen, ''delim'' kann einzelnes Element oder eine Folge sein  | 
 +| | | 
 +| ''elements<N>'' | gibt die ''N''-te Komponente von tupelartigen Elementen weiter | 
 +| ''keys'' | gibt alle Schlüssel von Schlüssel-Wert-Paaren weiter (''elements<0>'') | 
 +| ''values'' | gibt alle Werte von Schlüssel-Wert-Paaren weiter (''elements<1>'') | 
 + 
 + 
 +===== Beispiele =====
  
 <code cpp views_examples.cpp> <code cpp views_examples.cpp>
kennen/include/ranges.txt · Zuletzt geändert: 2020-07-08 18:10 von rrichter