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
kennen:include:ranges [2020-07-08 16:28]
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 im Namensraum ''std::ranges::views'' oder kurz ''std::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 den ''N''-ten Bestandteil 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