Modernes C++ und C-Alternativen

Container und Algorithmen der STL in C++

In dieser Lektion vergleichst du selbst geschriebene Schleifen zur Arrayverarbeitung in C mit der Kombination fertiger Algorithmen aus der C++-Standardbibliothek.

Einführung

Die C++-Standardbibliothek (STL) bietet Container wie vector und sehr viele fertige Algorithmen zum Filtern, Summieren oder Sortieren. Diese Algorithmen arbeiten auf einem Iteratorbereich und trennen so die Verarbeitung davon, wie die Daten gespeichert sind.

Wichtige Punkte

  • Verstehe zuerst, wie es in C funktioniert, bevor du die Abstraktionen von C++ lernst.
  • Drücke den Besitz von Ressourcen mit RAII und Wertsemantik (value semantics) aus.
  • Bevorzuge die typsicheren Werkzeuge von C++ gegenüber Makros und Typumwandlungen.

Codebeispiele in C und C++

C
Code ausführen →
main.c
#include <stdio.h>

int main(void) {
    int values[] = {3, 8, 2, 7, 6};
    int even[5];
    int count = 0;
    int sum = 0;
    for (int index = 0; index < 5; ++index) {
        if (values[index] % 2 == 0) {
            even[count++] = values[index];
        }
    }
    for (int index = 0; index < count; ++index) {
        sum += even[index];
    }
    printf("count=%d sum=%d\n", count, sum);
}
Ergebnis der Ausführung
count=3 sum=16
C++
Code ausführen →
main.cpp
#include <algorithm>
#include <iostream>
#include <iterator>
#include <numeric>
#include <vector>

int main() {
    std::vector values{3, 8, 2, 7, 6};
    std::vector<int> even;
    std::copy_if(values.begin(), values.end(),
                 std::back_inserter(even),
                 [](int value) { return value % 2 == 0; });
    std::cout << "count=" << even.size()
              << " sum="
              << std::accumulate(even.begin(), even.end(), 0) << '\n';
}
Ergebnis der Ausführung
count=3 sum=16

C und C++ im Vergleich

Die C-Version muss alle Schleifen selbst schreiben und die Größe des Arrays even selbst verwalten, um die geraden Zahlen herauszufiltern und zu summieren. Die C++-Version kombiniert std::copy_if zum Filtern und std::accumulate zum Summieren auf einem vector. Der Code ist kürzer und besser wiederverwendbar, die Komplexität bleibt so klar wie bei der selbst geschriebenen Schleife.

C

C verwendet Namenskonventionen, Callbacks, Makros und structs mit Kontext.

C++

C++ bietet Abstraktionen mit klarem Gültigkeitsbereich, die typsicher sind und zur Laufzeit meist nichts zusätzlich kosten.

Übungen zur Vertiefung

Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.

  • Schreibe den Mechanismus zuerst in C und verwende erst dann die entsprechende C++-Funktion.
  • Ersetze das manuelle Freigeben von Ressourcen durch RAII.
  • Prüfe, ob die Funktion Speicherreservierungen oder Aufrufe virtueller Funktionen verursacht.

Mit einer Challenge üben

Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.

Alle Challenges