Modernes C++ programmieren

Okt 23, 2024

lst-0835-godb.cpp

//#(compile) c++; compiler:g132; options:"-std=c++23"; libs:-
// https://godbolt.org/z/8sEdxd5jP 
#include <numeric>    // accumulate
#include <functional> // multiplies
#include <algorithm>  // transform, fold_left
#include <iostream>
#include <vector>
using std::accumulate; using std::cout; using std::vector; using std::multiplies;
namespace rs = std::ranges;
int main() {
  vector data{ 2, 3, 5, 10, 20 };
  cout << accumulate(data.begin(),data.end(),0)<<'\n';     // +, Ausgabe: 40
  cout << rs::fold_left(data, 1, multiplies<int>{})<<'\n'; // *, 6000
  vector<bool> gerade( data.size() );
  std::transform( data.begin(), data.end(), gerade.begin(),
      [](auto n) { return n%2==0; });
  for(auto b : gerade) {
      cout << ( b ? "gerade " : "ungerade ");
  }
  cout << "\n";       // Ausgabe: gerade ungerade ungerade gerade gerade
  auto sindAlleGerade = accumulate(gerade.begin(), gerade.end(), true,
          [](auto b, auto c) { return b&&c; });
  if(sindAlleGerade) {
      cout << "alles gerade Zahlen\n";
  } else {
      cout << "ungerade Zahlen dabei\n"; // das ist die Ausgabe
  }
}