Menu
Coddy logo textTech

Rückblick - Generische Container

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns eine GenericContainer-Klassenvorlage erstellen, die alles zusammenführt, was Sie in diesem Kapitel über Templates gelernt haben. Sie werden einen flexiblen, typsicheren Container erstellen, der Elemente dynamisch speichern kann und nützliche Operationen durch Template-Techniken bereitstellt.

Sie werden Ihren Code auf zwei Dateien verteilen:

  • GenericContainer.h: Definieren Sie hier Ihre Klassenvorlage. Ihr GenericContainer sollte:

    Elemente dynamisch unter Verwendung eines Zeigers auf ein Array speichern und dabei die aktuelle Größe und Kapazität verfolgen.

    Diese Kernmethoden bereitstellen:

    • Einen Konstruktor, der eine Anfangskapazität entgegennimmt
    • Einen Destruktor, der den dynamischen Speicher ordnungsgemäß bereinigt
    • push(T value) — fügt dem Container ein Element hinzu (nehmen Sie für diese Herausforderung an, dass die Kapazität immer ausreicht)
    • get(size_t index) — gibt das Element an dem angegebenen Index zurück
    • getSize() — gibt die aktuelle Anzahl der Elemente zurück

    Fügen Sie eine Funktionsvorlage namens printContainer hinzu, die ein GenericContainer<T>& entgegennimmt und alle Elemente durch Leerzeichen getrennt ausgibt, gefolgt von einem Zeilenumbruch.

    Erstellen Sie eine Template-Spezialisierung von printContainer für GenericContainer<bool>, die true oder false anstelle von 1 oder 0 ausgibt.

    Fügen Sie eine variadische Funktionsvorlage namens pushAll hinzu, die ein GenericContainer<T>& und eine beliebige Anzahl von Werten entgegennimmt und jeden einzelnen mithilfe eines Fold-Ausdrucks in den Container schiebt.

  • main.cpp: Lesen Sie fünf Eingaben ein (jede in einer separaten Zeile):
    1. Erste Ganzzahl
    2. Zweite Ganzzahl
    3. Dritte Ganzzahl
    4. Ein Double-Wert
    5. Ein Boolean als String (true oder false)

    Demonstrieren Sie Ihren Container durch:

    1. Erstellen eines GenericContainer<int> mit der Kapazität 10
    2. Verwenden von pushAll, um alle drei Ganzzahlen auf einmal hinzuzufügen
    3. Ausgeben der Größe: Int container size: <size>
    4. Aufrufen von printContainer, um die Ganzzahlen anzuzeigen
    5. Erstellen eines GenericContainer<double> mit der Kapazität 5
    6. Hinzufügen des Double-Werts und des Literals 2.5 durch einzelne push-Aufrufe
    7. Aufrufen von printContainer, um die Doubles anzuzeigen
    8. Erstellen eines GenericContainer<bool> mit der Kapazität 5
    9. Hinzufügen der Boolean-Eingabe und des Literals false
    10. Aufrufen von printContainer, um die Booleans anzuzeigen (sollte true/false zeigen)

Zum Beispiel bei den Eingaben 10, 20, 30, 3.14 und true:

Int container size: 3
10 20 30 
3.14 2.5 
true false 

Diese Herausforderung kombiniert Klassenvorlagen für den Container, Template-Spezialisierung für die benutzerdefinierte bool-Ausgabe und variadische Templates für die flexible pushAll-Funktion. Ihr Container verwaltet seinen eigenen Speicher nach RAII-Prinzipien und demonstriert, wie Templates mit ordnungsgemäßem Ressourcenmanagement integriert werden.

Probier es selbst

#include <iostream>
#include <string>
#include "GenericContainer.h"

using namespace std;

int main() {
    // Eingaben lesen
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // String in bool konvertieren
    bool boolVal = (boolStr == "true");
    
    // TODO: Erstelle GenericContainer<int> mit einer Kapazität von 10
    
    // TODO: Verwende pushAll, um alle drei Ganzzahlen auf einmal hinzuzufügen
    
    // TODO: Gib die Größe aus: "Int container size: <size>"
    
    // TODO: Rufe printContainer auf, um die Ganzzahlen anzuzeigen
    
    // TODO: Erstelle GenericContainer<double> mit einer Kapazität von 5
    
    // TODO: Füge den double-Wert und 2.5 mit einzelnen push-Aufrufen hinzu
    
    // TODO: Rufe printContainer auf, um die Doubles anzuzeigen
    
    // TODO: Erstelle GenericContainer<bool> mit einer Kapazität von 5
    
    // TODO: Füge die boolesche Eingabe und false hinzu
    
    // TODO: Rufe printContainer auf, um die Booleans anzuzeigen
    
    return 0;
}

Alle Lektionen in Objektorientierte Programmierung