Menu
Coddy logo textTech

Récapitulatif - Conteneur générique

Fait partie de la section Programmation Orientée Objet du Journey C++ de Coddy — leçon 69 sur 104.

challenge icon

Défi

Facile

Construisons un modèle de classe GenericContainer qui rassemble tout ce que vous avez appris sur les templates dans ce chapitre. Vous allez créer un conteneur flexible et de type sécurisé qui peut stocker des éléments de manière dynamique et fournir des opérations utiles grâce aux techniques de templates.

Vous organiserez votre code sur deux fichiers :

  • GenericContainer.h : Définissez votre modèle de classe ici. Votre GenericContainer doit :

    Stocker les éléments de manière dynamique à l'aide d'un pointeur vers un tableau, tout en suivant la taille actuelle et la capacité.

    Fournir ces méthodes de base :

    • Un constructeur qui prend une capacité initiale
    • Un destructeur qui nettoie correctement la mémoire dynamique
    • push(T value) — ajoute un élément au conteneur (supposez que la capacité est toujours suffisante pour ce défi)
    • get(size_t index) — retourne l'élément à l'index donné
    • getSize() — retourne le nombre actuel d'éléments

    Ajouter un modèle de fonction appelé printContainer qui prend un GenericContainer<T>& et affiche tous les éléments séparés par des espaces, suivis d'un saut de ligne.

    Créer une spécialisation de modèle de printContainer pour GenericContainer<bool> qui affiche true ou false au lieu de 1 ou 0.

    Ajouter un modèle de fonction variadique appelé pushAll qui prend un GenericContainer<T>& et n'importe quel nombre de valeurs, en insérant chacune dans le conteneur à l'aide d'une expression de repli (fold expression).

  • main.cpp : Lire cinq entrées (chacune sur une ligne séparée) :
    1. Premier entier
    2. Deuxième entier
    3. Troisième entier
    4. Une valeur double
    5. Un booléen sous forme de chaîne (true ou false)

    Démontrer votre conteneur en :

    1. Créant un GenericContainer<int> avec une capacité de 10
    2. Utilisant pushAll pour ajouter les trois entiers en une seule fois
    3. Affichant la taille : Int container size: <size>
    4. Appelant printContainer pour afficher les entiers
    5. Créant un GenericContainer<double> avec une capacité de 5
    6. Ajoutant la valeur double et le littéral 2.5 à l'aide d'appels push individuels
    7. Appelant printContainer pour afficher les doubles
    8. Créant un GenericContainer<bool> avec une capacité de 5
    9. Ajoutant l'entrée booléenne et le littéral false
    10. Appelant printContainer pour afficher les booléens (devrait afficher true/false)

Par exemple, avec les entrées 10, 20, 30, 3.14, et true :

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

Ce défi combine les modèles de classes pour le conteneur, la spécialisation de modèle pour l'affichage personnalisé des booléens, et les modèles variadiques pour la fonction flexible pushAll. Votre conteneur gère sa propre mémoire en suivant les principes RAII, démontrant comment les modèles s'intègrent à une gestion appropriée des ressources.

Essayez vous-même

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

using namespace std;

int main() {
    // Lire les entrées
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // Convertir la chaîne en bool
    bool boolVal = (boolStr == "true");
    
    // TODO: Créer GenericContainer<int> avec une capacité de 10
    
    // TODO: Utiliser pushAll pour ajouter les trois entiers en même temps
    
    // TODO: Afficher la taille : "Int container size: <size>"
    
    // TODO: Appeler printContainer pour afficher les entiers
    
    // TODO: Créer GenericContainer<double> avec une capacité de 5
    
    // TODO: Ajouter la valeur double et 2.5 en utilisant des appels push individuels
    
    // TODO: Appeler printContainer pour afficher les doubles
    
    // TODO: Créer GenericContainer<bool> avec une capacité de 5
    
    // TODO: Ajouter l'entrée booléenne et false
    
    // TODO: Appeler printContainer pour afficher les booléens
    
    return 0;
}

Toutes les leçons de Programmation Orientée Objet