Menu
Coddy logo textTech

Rückblick – Generischer Container

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

challenge icon

Aufgabe

Einfach

Lass uns eine GenericContainer-Vorlage für die class erstellen, die alles zusammenführt, was du in diesem Kapitel über Vorlagen gelernt hast. Du wirst einen flexiblen, typsicheren Container erstellen, der elements dynamisch speichern und durch Vorlagentechniken nützliche Operationen bereitstellen kann.

Du organisierst deinen Code über zwei Dateien:

  • GenericContainer.h: Definiere hier deine class-Vorlage. Dein GenericContainer sollte:

    elements dynamisch mithilfe eines Zeigers auf ein array speichern und dabei die current Größe sowie die capacity verfolgen.

    Diese grundlegenden Methoden bereitstellen:

    • Einen Konstruktor, der eine initial capacity entgegennimmt
    • Einen Destruktor, der den dynamischen Speicher ordnungsgemäß bereinigt
    • push(T value): ein element zum Container hinzufügen (für diese Aufgabe wird angenommen, dass die capacity immer ausreicht)
    • get(size_t index): das element am angegebenen index zurückgeben
    • getSize(): die aktuelle Anzahl der elements zurückgeben

    Eine function-Vorlage namens printContainer hinzufügen, die einen GenericContainer<T>& entgegennimmt und alle elements, durch Leerzeichen getrennt und gefolgt von einem Zeilenumbruch, ausgibt.

    Eine Vorlagenspezialisierung von printContainer für GenericContainer<bool> erstellen, die true oder false anstelle von 1 oder 0 ausgibt.

    Eine variadische function-Vorlage namens pushAll hinzufügen, die einen GenericContainer<T>& und eine beliebige Anzahl von Werten entgegennimmt und jeden einzelnen mithilfe eines fold-Ausdrucks in den Container einfügt.

  • main.cpp: Lies fünf Eingaben ein (jede in einer eigenen Zeile):
    1. Erste ganze Zahl
    2. Zweite ganze Zahl
    3. Dritte ganze Zahl
    4. Einen double-Wert
    5. Einen boolean-Wert als Zeichenkette (true oder false)

    Demonstriere deinen Container, indem du:

    1. Einen GenericContainer<int> mit der capacity 10 erstellst
    2. pushAll verwendest, um alle drei ganzen Zahlen gleichzeitig hinzuzufügen
    3. Die Größe ausgibst: Int container size: <size>
    4. printContainer aufrufst, um die ganzen Zahlen anzuzeigen
    5. Einen GenericContainer<double> mit der capacity 5 erstellst
    6. Den double-Wert und das Literal 2.5 mithilfe einzelner push-Aufrufe einfügst
    7. printContainer aufrufst, um die doubles anzuzeigen
    8. Einen GenericContainer<bool> mit der capacity 5 erstellst
    9. Die boolean-Eingabe und das Literal false einfügst
    10. printContainer aufrufst, um die booleans anzuzeigen (es sollte true/false ausgeben)

Beispielsweise mit den Eingaben 10, 20, 30, 3.14 und true:

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

Diese Aufgabe kombiniert class-Vorlagen für den Container, Vorlagenspezialisierung für die benutzerdefinierte bool-Ausgabe und variadische Vorlagen für die flexible pushAll-function. Dein Container verwaltet seinen eigenen Speicher nach den RAII-Prinzipien und zeigt, wie Vorlagen mit einer ordnungsgemäßen Ressourcenverwaltung zusammenwirken.

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 Kapazität 10
    
    // TODO: Verwende pushAll, um alle drei Ganzzahlen auf einmal hinzuzufügen
    
    // TODO: Print the size: "Int container size: <size>"
    
    // TODO: Call printContainer to display the integers
    
    // TODO: Erstelle GenericContainer<double> mit Kapazität 5
    
    // TODO: Füge den double-Wert und 2.5 mit einzelnen push-Aufrufen hinzu
    
    // TODO: Call printContainer to display the doubles
    
    // TODO: Erstelle GenericContainer<bool> mit Kapazität 5
    
    // TODO: Füge die boolesche Eingabe und false hinzu
    
    // TODO: Call printContainer to display the booleans
    
    return 0;
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C++-Compiler