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 RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
kennen:include:ranges [2024-02-22 20:53] – [Beispiele] rrichterkennen:include:ranges [2024-02-22 21:04] (aktuell) – [Beispiele] rrichter
Zeile 126: Zeile 126:
  
 ===== Beispiele ===== ===== Beispiele =====
 +<file>
 +empty<T>                                 : []
 +single(42)                               : [42]
 +iota(0,6)                                : [0, 1, 2, 3, 4, 5]
 +iota(0) | take(3)                        : [0, 1, 2]
 +repeat(6) | take(3)                      : [6, 6, 6]
  
 +counted(begin(v),size(v))                : [1, 3, 5, 4, 2]
 +v | all                                  : [1, 3, 5, 4, 2]
 +v | drop_while(below_5)                  : [5, 4, 2]
 +v | enumerate                            : [(0, 1), (1, 3), (2, 5), (3, 4), (4, 2)]
 +v | filter(below_5)                      : [1, 3, 4, 2]
 +v | reverse                              : [2, 4, 5, 3, 1]
 +v | take_while(below_5)                  : [1, 3]
 +v | transform(square)                    : [1, 9, 25, 16, 4]
 +
 +v | chunk(3)                             : [[1, 3, 5], [4, 2]]
 +v | chunk_by(std::ranges::less{})        : [[1, 3, 5], [4], [2]]
 +v | pairwise_transform(double_digit)     : [13, 35, 54, 42]
 +v | pairwise                             : [(1, 3), (3, 5), (5, 4), (4, 2)]
 +v | slide(2)                             : [[1, 3], [3, 5], [5, 4], [4, 2]]
 +v | stride(2)                            : [1, 5, 2]
 +
 +s                                        : ['A', 'B', ' ', 'C', 'D', 'E']
 +s | split(' '                          : [['A', 'B'], ['C', 'D', 'E']]
 +s | split(' ') | join                    : ['A', 'B', 'C', 'D', 'E']
 +s | split(' ') | join_with("<>"s)        : ['A', 'B', '<', '>', 'C', 'D', 'E']
 +
 +zip(v, s)                                : [(1, 'A'), (3, 'B'), (5, ' '), (4, 'C'), (2, 'D')]
 +zip_transform(double_digit, v, v)        : [11, 33, 55, 44, 22]
 +cartesian_product(v|take(2), s|take(2))  : [(1, 'A'), (1, 'B'), (3, 'A'), (3, 'B')]
 +
 +m                                        : {"answer": 42, "wrong": 54}
 +m | keys                                 : ["answer", "wrong"]
 +m | values                               : [42, 54]
 +</file>
 +ist die Ausgabe des Programms
 <code cpp views_examples.cpp> <code cpp views_examples.cpp>
 #include <ranges> #include <ranges>
Zeile 140: Zeile 176:
 void show(Range&& r, Msg message) void show(Range&& r, Msg message)
 { {
- std::print("{:<40}: {}", message, r);+    std::print("{:<40}: {}", message, r);
 } }
  
Zeile 146: Zeile 182:
 void show_range_of_ranges(Range&& r, Msg message) void show_range_of_ranges(Range&& r, Msg message)
 { {
- show(r, message); +    show(r, message);    
 } }
  
Zeile 152: Zeile 188:
 void show_range_of_pairs(Range&& r, Msg message) void show_range_of_pairs(Range&& r, Msg message)
 { {
- show(r, message); +    show(r, message);    
 } }
  
Zeile 158: Zeile 194:
 void show_map(Range&& r, Msg message) void show_map(Range&& r, Msg message)
 { {
- show(r, message); +    show(r, message);    
 } }
  
Zeile 166: Zeile 202:
 auto decorate(auto e)  auto decorate(auto e) 
 { {
- return e;+    return e;
 } }
  
 auto decorate(char e)  auto decorate(char e) 
 { {
- return std::string("\'") + e + "\'";+    return std::string("\'") + e + "\'";
 } }
  
 auto decorate(std::string e)  auto decorate(std::string e) 
 { {
- return std::string("\"") + e + "\"";+    return std::string("\"") + e + "\"";
 } }
  
Zeile 205: Zeile 241:
         {         {
             std::cout << (inner_cnt++ ? ", ":""             std::cout << (inner_cnt++ ? ", ":""
-           << decorate(e);+                      << decorate(e);
         }         }
         std::cout << "]";                 std::cout << "]";        
Zeile 221: Zeile 257:
     {     {
         std::cout << (cnt++ ? ", ":""         std::cout << (cnt++ ? ", ":""
-           << "(" << decorate(a) << ", " << decorate(b) << ")";    +                  << "(" << decorate(a) << ", " << decorate(b) << ")";    
     }         }    
     std::cout << "]\n";     std::cout << "]\n";
Zeile 235: Zeile 271:
     {     {
         std::cout << (cnt++ ? ", ":"")         std::cout << (cnt++ ? ", ":"")
-           << decorate(k) << ": " << decorate(v);    +                  << decorate(k) << ": " << decorate(v);    
     }         }    
     std::cout << "}\n";     std::cout << "}\n";
Zeile 245: Zeile 281:
 { {
     using namespace std::views;     using namespace std::views;
- using namespace std::string_literals;+    using namespace std::string_literals;
          
     auto v = std::vector{ 1, 3, 5, 4, 2 };     auto v = std::vector{ 1, 3, 5, 4, 2 };
Zeile 251: Zeile 287:
     auto m = std::map<std::string,int>{{"wrong", 6*9}, {"answer", 42}};     auto m = std::map<std::string,int>{{"wrong", 6*9}, {"answer", 42}};
     auto below_5 = [](int x){ return x < 5; };     auto below_5 = [](int x){ return x < 5; };
- auto double_digit = [](int a, int b) { return 10*a + b; }; +    auto double_digit = [](int a, int b) { return 10*a + b; }; 
- +    
     show( empty<int>, "empty<T>");     show( empty<int>, "empty<T>");
     show( single(42), "single(42)");     show( single(42), "single(42)");
Zeile 258: Zeile 294:
     show( iota(0) | take(3), "iota(0) | take(3)");     show( iota(0) | take(3), "iota(0) | take(3)");
     show( repeat(6) | take(3), "repeat(6) | take(3)");     show( repeat(6) | take(3), "repeat(6) | take(3)");
- std::cout << '\n';+    std::cout << '\n';
  
     show( counted(begin(v), size(v)), "counted(begin(v),size(v))");     show( counted(begin(v), size(v)), "counted(begin(v),size(v))");
     show( v | all, "v | all");     show( v | all, "v | all");
     show( v | drop_while(below_5), "v | drop_while(below_5)");     show( v | drop_while(below_5), "v | drop_while(below_5)");
- show_range_of_pairs(v | enumerate, "v | enumerate");+    show_range_of_pairs(v | enumerate, "v | enumerate");
     show( v | filter(below_5), "v | filter(below_5)");     show( v | filter(below_5), "v | filter(below_5)");
     show( v | reverse, "v | reverse");     show( v | reverse, "v | reverse");
     show( v | take_while(below_5), "v | take_while(below_5)");     show( v | take_while(below_5), "v | take_while(below_5)");
     show( v | transform([](int x){ return x*x; }), "v | transform(square)");     show( v | transform([](int x){ return x*x; }), "v | transform(square)");
- std::cout << '\n';+    std::cout << '\n';
  
- show_range_of_ranges( v | chunk(3), "v | chunk(3)" ); +    show_range_of_ranges( v | chunk(3), "v | chunk(3)" ); 
- show_range_of_ranges( v | chunk_by(std::ranges::less{}), "v | chunk_by(std::ranges::less{})" ); +    show_range_of_ranges( v | chunk_by(std::ranges::less{}), "v | chunk_by(std::ranges::less{})" ); 
- show( v | pairwise_transform(double_digit), "v | pairwise_transform(double_digit)" ); +    show( v | pairwise_transform(double_digit), "v | pairwise_transform(double_digit)" ); 
- show_range_of_pairs( v | pairwise, "v | pairwise" ); +    show_range_of_pairs( v | pairwise, "v | pairwise" ); 
- show_range_of_ranges( v | slide(2), "v | slide(2)" ); +    show_range_of_ranges( v | slide(2), "v | slide(2)" ); 
- show( v | stride(2), "v | stride(2)" ); +    show( v | stride(2), "v | stride(2)" ); 
- std::cout << '\n';+    std::cout << '\n';
  
     show( s , "s");     show( s , "s");
Zeile 282: Zeile 318:
     show( s | split(' ') | join, "s | split(\' \') | join");     show( s | split(' ') | join, "s | split(\' \') | join");
     show( s | split(' ') | join_with("<>"s), "s | split(\' \') | join_with(\"<>\"s)");     show( s | split(' ') | join_with("<>"s), "s | split(\' \') | join_with(\"<>\"s)");
- std::cout << '\n';+    std::cout << '\n';
  
- show_range_of_pairs( zip(v, s), "zip(v, s)" ); +    show_range_of_pairs( zip(v, s), "zip(v, s)" ); 
- show( zip_transform(double_digit, v, v), "zip_transform(double_digit, v, v)" ); +    show( zip_transform(double_digit, v, v), "zip_transform(double_digit, v, v)" ); 
- show_range_of_pairs( cartesian_product(v|take(2), s|take(2)), "cartesian_product(v|take(2), s|take(2))" ); +    show_range_of_pairs( cartesian_product(v|take(2), s|take(2)), "cartesian_product(v|take(2), s|take(2))" ); 
- std::cout << '\n';+    std::cout << '\n';
  
- show_map( m , "m");+    show_map( m , "m");
     show( m | keys , "m | keys");     show( m | keys , "m | keys");
     show( m | values , "m | values");     show( m | values , "m | values");
 } }
 </code> </code>
-erzeugt die Ausgabe 
-<file> 
-empty<T>                                 : [] 
-single(42)                               : [42] 
-iota(0,6)                                : [0, 1, 2, 3, 4, 5] 
-iota(0) | take(3)                        : [0, 1, 2] 
-repeat(6) | take(3)                      : [6, 6, 6] 
  
-counted(begin(v),size(v))                : [1, 3, 5, 4, 2] 
-v | all                                  : [1, 3, 5, 4, 2] 
-v | drop_while(below_5)                  : [5, 4, 2] 
-v | enumerate                            : [(0, 1), (1, 3), (2, 5), (3, 4), (4, 2)] 
-v | filter(below_5)                      : [1, 3, 4, 2] 
-v | reverse                              : [2, 4, 5, 3, 1] 
-v | take_while(below_5)                  : [1, 3] 
-v | transform(square)                    : [1, 9, 25, 16, 4] 
- 
-v | chunk(3)                             : [[1, 3, 5], [4, 2]] 
-v | chunk_by(std::ranges::less{})        : [[1, 3, 5], [4], [2]] 
-v | pairwise_transform(double_digit)     : [13, 35, 54, 42] 
-v | pairwise                             : [(1, 3), (3, 5), (5, 4), (4, 2)] 
-v | slide(2)                             : [[1, 3], [3, 5], [5, 4], [4, 2]] 
-v | stride(2)                            : [1, 5, 2] 
- 
-s                                        : ['A', 'B', ' ', 'C', 'D', 'E'] 
-s | split(' '                          : [['A', 'B'], ['C', 'D', 'E']] 
-s | split(' ') | join                    : ['A', 'B', 'C', 'D', 'E'] 
-s | split(' ') | join_with("<>"s)        : ['A', 'B', '<', '>', 'C', 'D', 'E'] 
- 
-zip(v, s)                                : [(1, 'A'), (3, 'B'), (5, ' '), (4, 'C'), (2, 'D')] 
-zip_transform(double_digit, v, v)        : [11, 33, 55, 44, 22] 
-cartesian_product(v|take(2), s|take(2))  : [(1, 'A'), (1, 'B'), (3, 'A'), (3, 'B')] 
- 
-m                                        : {"answer": 42, "wrong": 54} 
-m | keys                                 : ["answer", "wrong"] 
-m | values                               : [42, 54] 
-</file> 
kennen/include/ranges.1708631608.txt.gz · Zuletzt geändert: 2024-02-22 20:53 von rrichter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki