Modernes C++ programmieren

Okt 23, 2024

lst-0844-godb.cpp

//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/8d8qPWPcG 
#include <vector>
#include <iostream>
#include <algorithm>
using std::vector; using std::ostream; using std::cout;
int main() {
    vector<int> data{};
    data.reserve(400);                    // Platz für 400 Elemente
    // Phase 1: befüllen
    for(int idx = 1; idx <= 20; ++idx) {
        for(int val = 0; val < 20; ++val) {
            data.push_back(val % idx);    // irgendwas zwischen 0 und 19
        }
    }
    cout << data.size() << '\n';          // 400 Elemente zwischen 0 und 19
    // Nachbereitung Phase 1: set-Äquivalent erstellen
    std::sort(data.begin(), data.end());  // Vorbereitung für unique
    auto wo = std::unique(data.begin(), data.end()); // doppelte ans Ende
    data.erase(wo, data.end());           // doppelte wegräumen
    data.shrink_to_fit();
    cout << data.size() << '\n';          // nur noch 20 Elemente
    // Phase 2: benutzen
    for(auto &e:data)
        cout << e << ' ';                 // Ausgabe: 0 1 2 .. 18 19
    cout << '\n';
    auto it = std::lower_bound(data.begin(), data.end(), 16); // suche Wert
    if(it!=data.end() && *it == 16)
        cout << "gefunden!\n";
    if(std::binary_search(data.begin(), data.end(), 7))       // ja oder nein
        cout << "auch gefunden!\n";
}