Menu
CoddyTech

Recapitulação - Contêiner Genérico

Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy. Lição 69 de 104.

challenge icon

Desafio

Fácil

Vamos criar um modelo de classe GenericContainer que reúne tudo o que você aprendeu sobre modelos neste capítulo. Você criará um contêiner flexível e seguro quanto a tipos, capaz de armazenar elementos dinamicamente e oferecer operações úteis por meio de técnicas de modelos.

Você organizará seu código em dois arquivos:

  • GenericContainer.h: defina aqui seu modelo de classe. Seu GenericContainer deve:

    Armazenar elementos dinamicamente usando um ponteiro para um array, além de acompanhar o tamanho atual e a capacidade.

    Fornecer estes métodos principais:

    • Um construtor que recebe uma capacidade inicial
    • Um destrutor que libera corretamente a memória dinâmica
    • push(T value): adiciona um elemento ao contêiner (considere que a capacidade é sempre suficiente para este desafio)
    • get(size_t index): retorna o elemento no índice fornecido
    • getSize(): retorna a quantidade atual de elementos

    Adicione um modelo de função chamado printContainer que recebe um GenericContainer<T>& e imprime todos os elementos separados por espaços, seguidos por uma quebra de linha.

    Crie uma especialização de modelo de printContainer para GenericContainer<bool> que imprime true ou false em vez de 1 ou 0.

    Adicione um modelo de função variádica chamado pushAll que recebe um GenericContainer<T>& e qualquer quantidade de valores, inserindo cada um no contêiner usando uma expressão fold. Uma fold sobre o operador vírgula, como (container.push(args), ...);, executa a chamada uma vez para cada argumento.

  • main.cpp: leia cinco entradas (cada uma em uma linha separada):
    1. Primeiro número inteiro
    2. Segundo número inteiro
    3. Terceiro número inteiro
    4. Um valor double
    5. Um booleano como string (true ou false)

    Demonstre seu contêiner fazendo o seguinte:

    1. Criar um GenericContainer<int> com capacidade 10
    2. Usar pushAll para adicionar os três números inteiros de uma só vez
    3. Imprimir o tamanho: Int container size: <size>
    4. Chamar printContainer para exibir os números inteiros
    5. Criar um GenericContainer<double> com capacidade 5
    6. Inserir o valor double e o literal 2.5 usando chamadas individuais de push
    7. Chamar printContainer para exibir os valores double
    8. Criar um GenericContainer<bool> com capacidade 5
    9. Inserir a entrada booleana e o literal false
    10. Chamar printContainer para exibir os valores booleanos (deve mostrar true/false)

Por exemplo, com as entradas 10, 20, 30, 3.14 e true:

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

Este desafio combina modelos de classe para o contêiner, especialização de modelo para a impressão personalizada de valores bool e modelos variádicos para a função flexível pushAll. Seu contêiner gerencia a própria memória seguindo os princípios RAII, demonstrando como os modelos se integram ao gerenciamento adequado de recursos.

Experimente você mesmo

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

using namespace std;

int main() {
    // Leia as entradas
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // Converta a string para bool
    bool boolVal = (boolStr == "true");
    
    // TODO: Crie GenericContainer<int> com capacidade 10
    
    // TODO: Use pushAll para adicionar os três números inteiros de uma vez
    
    // TODO: Imprima o tamanho: "Int container size: <size>"
    
    // TODO: Chame printContainer para exibir os números inteiros
    
    // TODO: Crie GenericContainer<double> com capacidade 5
    
    // TODO: Adicione o valor double e 2.5 usando chamadas individuais a push
    
    // TODO: Chame printContainer para exibir os valores double
    
    // TODO: Crie GenericContainer<bool> com capacidade 5
    
    // TODO: Adicione a entrada booleana e false
    
    // TODO: Chame printContainer para exibir os valores booleanos
    
    return 0;
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C++ online