Modernes C++ programmieren

Okt 23, 2024

lst-0761-godb.cpp

//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/1Eoh9aoas 
#include <set>
#include <functional> // function
using std::set; using std::function; using std::initializer_list;
bool fcompZehner(int a, int b) { return a%10 < b%10; }
struct Fuenfer {
    bool operator()(int a, int b) const { return a%5 < b% 5; }
};

int main() {
    // Funktor
    set<int, Fuenfer> ff1;
    ff1.insert(5);
    set ff2({5}, Fuenfer{}); 
    set ff3(initializer_list<int>({}), Fuenfer{});
    // Lambda
    set<int,function<bool(int,int)>> ll1([](auto a,auto b){return a%3<b%3;});
    ll1.insert(3);
    auto lcomp = [](int a, int b) { return a%3 < b%3; };
    set<int, decltype(lcomp)> ll2(lcomp);
    ll2.insert(3);
    set ll3({3}, lcomp); 
    // Funktionszeiger
    set<int, bool(*)(int,int)> zz1(&fcompZehner);        // C-Stil
    zz1.insert(10);
    set<int, function<bool(int,int)>> zz2(&fcompZehner); // C++-Stil
    zz2.insert(10);
    set<int, decltype(&fcompZehner)> zz3(&fcompZehner);  // C++-Stil
    zz3.insert(10);
}