Menu
Coddy logo textTech

STL-Übersicht & Philosophie

Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy — Lektion 70 von 104.

Die Standard Template Library (STL) ist eine Sammlung von template-basierten Klassen und Funktionen, die gängige Datenstrukturen und Algorithmen bereitstellen. Aufbauend auf den Template-Konzepten, die Sie gelernt haben, verkörpert die STL eine leistungsstarke Designphilosophie: die Trennung von Datenspeicherung und Datenmanipulation.

Die STL ist um drei Kernkomponenten herum organisiert, die zusammenarbeiten:

KomponenteZweckBeispiele
ContainerSpeichern Sammlungen von Objektenvector, map, set
IteratorenErmöglichen den Zugriff auf Container-ElementeEingabe, Ausgabe, wahlfreier Zugriff
AlgorithmenFühren Operationen auf Daten aussort, find, transform

Die entscheidende Erkenntnis ist, dass Algorithmen nichts direkt über Container wissen – sie arbeiten über Iteratoren. Das bedeutet, dass ein einziger sort-Algorithmus mit Vektoren, Arrays und jedem Container funktioniert, der den richtigen Iteratortyp bereitstellt:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> nums = {5, 2, 8, 1, 9};
    
    std::sort(nums.begin(), nums.end());
    
    for (int n : nums) {
        std::cout << n << " ";
    }
    // Ausgabe: 1 2 5 8 9
}

Diese Trennung bedeutet, dass Sie kombinieren können – verwenden Sie jeden Algorithmus mit jedem kompatiblen Container, ohne neuen Code zu schreiben. Die STL bietet praxiserprobte, optimierte Implementierungen, sodass Sie sich auf das Lösen von Problemen konzentrieren können, anstatt gängige Datenstrukturen neu zu erfinden.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein einfaches Datenverarbeitungssystem erstellen, das die STL-Philosophie der Trennung von Containern, Iteratoren und Algorithmen demonstriert. Sie werden ein Utility-Modul erstellen, das mit STL-Komponenten arbeitet, und ein Hauptprogramm, das zeigt, wie diese Teile zusammenpassen.

Sie werden zwei Dateien erstellen:

  • DataProcessor.h: Definieren Sie Utility-Funktionen, die über Iteratoren mit STL-Containern arbeiten und so die Designphilosophie der STL demonstrieren.

    Erstellen Sie eine Funktion namens printVector, die einen std::vector<int>& entgegennimmt und alle Elemente durch Leerzeichen getrennt ausgibt, gefolgt von einem Zeilenumbruch. Verwenden Sie Iteratoren (begin() und end()), um den Container zu durchlaufen.

    Erstellen Sie eine Funktion namens sortAndPrint, die einen std::vector<int>& entgegennimmt, diesen mit std::sort sortiert und dann die sortierten Elemente durch Leerzeichen getrennt ausgibt, gefolgt von einem Zeilenumbruch.

    Erstellen Sie eine Funktion namens findElement, die einen std::vector<int>& und einen zu suchenden int-Wert entgegennimmt. Verwenden Sie std::find, um das Element zu lokalisieren. Wenn es gefunden wird, geben Sie Found: <value> aus. Wenn es nicht gefunden wird, geben Sie Not found: <value> aus.

    Erstellen Sie eine Funktion namens getSum, die einen std::vector<int>& entgegennimmt und die Summe aller Elemente zurückgibt. Sie können hierfür eine einfache Schleife mit Iteratoren verwenden.

  • main.cpp: Lesen Sie Eingaben ein und demonstrieren Sie, wie STL-Komponenten zusammenarbeiten.

    Lesen Sie fünf Eingaben ein (jede in einer separaten Zeile):

    1. Erste Ganzzahl
    2. Zweite Ganzzahl
    3. Dritte Ganzzahl
    4. Vierte Ganzzahl
    5. Ein zu suchender Wert

    Erstellen Sie einen std::vector<int> und fügen Sie die ersten vier Ganzzahlen hinzu. Demonstrieren Sie dann die STL-Philosophie durch:

    1. Ausgabe von Original: gefolgt vom Aufruf von printVector
    2. Ausgabe von Sorted: gefolgt vom Aufruf von sortAndPrint
    3. Aufruf von findElement mit dem Suchwert
    4. Ausgabe von Sum: <result> unter Verwendung von getSum

Zum Beispiel bei den Eingaben 5, 2, 8, 1 und 8:

Original: 5 2 8 1 
Sorted: 1 2 5 8 
Found: 8
Sum: 16

Bei den Eingaben 10, 30, 20, 40 und 15:

Original: 10 30 20 40 
Sorted: 10 20 30 40 
Not found: 15
Sum: 100

Beachten Sie, wie Ihre Funktionen über Iteratoren mit dem Vektor arbeiten und wie std::sort und std::find auf jedem Container operieren, der den richtigen Iteratortyp bereitstellt. Dies ist die Stärke des STL-Designs — Algorithmen sind von Containern entkoppelt und nur über Iteratoren miteinander verbunden.

Spickzettel

Die Standard Template Library (STL) ist eine Sammlung von template-basierten Klassen und Funktionen, die gängige Datenstrukturen und Algorithmen bereitstellen. Sie trennt die Datenspeicherung von der Datenmanipulation.

Die STL besteht aus drei Kernkomponenten:

KomponenteZweckBeispiele
ContainerSpeichern Sammlungen von Objektenvector, map, set
IteratorenErmöglichen den Zugriff auf Container-ElementeEingabe, Ausgabe, Direktzugriff
AlgorithmenFühren Operationen auf Daten aussort, find, transform

Algorithmen arbeiten über Iteratoren, nicht direkt mit Containern. Dies ermöglicht es einem einzelnen Algorithmus, mit jedem kompatiblen Container zu arbeiten:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> nums = {5, 2, 8, 1, 9};
    
    // Sortieren unter Verwendung von Iteratoren
    std::sort(nums.begin(), nums.end());
    
    // Durchlaufen unter Verwendung von Iteratoren
    for (int n : nums) {
        std::cout << n << " ";
    }
    // Ausgabe: 1 2 5 8 9
}

Gängige Iterator-Methoden:

  • begin() - gibt einen Iterator auf das erste Element zurück
  • end() - gibt einen Iterator auf die Position nach dem letzten Element zurück

Gängige STL-Algorithmen:

  • std::sort(begin, end) - sortiert Elemente in einem Bereich
  • std::find(begin, end, value) - sucht nach einem Wert in einem Bereich

Probier es selbst

#include <iostream>
#include <vector>
#include "DataProcessor.h"

using namespace std;

int main() {
    // Lies fünf Ganzzahlen aus der Eingabe
    int num1, num2, num3, num4, searchValue;
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> num4;
    cin >> searchValue;
    
    // TODO: Erstelle einen vector und füge die ersten vier Ganzzahlen hinzu
    
    // TODO: Gib "Original: " aus und rufe printVector auf
    
    // TODO: Gib "Sorted: " aus und rufe sortAndPrint auf
    
    // TODO: Rufe findElement mit dem Suchwert auf
    
    // TODO: Gib "Sum: " gefolgt vom Ergebnis von getSum aus
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung