Menu
Coddy logo textTech

Recapitulação - Container 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 construir um template de classe GenericContainer que reúne tudo o que você aprendeu sobre templates neste capítulo. Você criará um contêiner flexível e com segurança de tipos que pode armazenar elementos dinamicamente e fornecer operações úteis por meio de técnicas de template.

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

  • GenericContainer.h: Defina seu template de classe aqui. Seu GenericContainer deve:

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

    Fornecer estes métodos principais:

    • Um construtor que recebe uma capacidade inicial
    • Um destrutor que limpa adequadamente a memória dinâmica
    • push(T value) — adiciona um elemento ao contêiner (assuma que a capacidade é sempre suficiente para este desafio)
    • get(size_t index) — retorna o elemento no índice fornecido
    • getSize() — retorna o número atual de elementos

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

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

    Adicione um template de função variádica chamado pushAll que recebe um GenericContainer<T>& e qualquer número de valores, inserindo cada um no contêiner usando uma expressão de dobra (fold expression).

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

    Demonstre seu contêiner:

    1. Criando um GenericContainer<int> com capacidade 10
    2. Usando pushAll para adicionar todos os três inteiros de uma vez
    3. Imprimindo o tamanho: Int container size: <size>
    4. Chamando printContainer para exibir os inteiros
    5. Criando um GenericContainer<double> com capacidade 5
    6. Inserindo o valor double e o literal 2.5 usando chamadas individuais de push
    7. Chamando printContainer para exibir os doubles
    8. Criando um GenericContainer<bool> com capacidade 5
    9. Inserindo a entrada booleana e o literal false
    10. Chamando printContainer para exibir os 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 templates de classe para o contêiner, especialização de template para impressão personalizada de bool e templates variádicos para a função flexível pushAll. Seu contêiner gerencia sua própria memória seguindo os princípios RAII, demonstrando como os templates se integram com o gerenciamento adequado de recursos.

Experimente você mesmo

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

using namespace std;

int main() {
    // Ler as entradas
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // Converter string para bool
    bool boolVal = (boolStr == "true");
    
    // TODO: Create GenericContainer<int> with capacity 10
    
    // TODO: Use pushAll to add all three integers at once
    
    // TODO: Print the size: "Int container size: <size>"
    
    // TODO: Call printContainer to display the integers
    
    // TODO: Create GenericContainer<double> with capacity 5
    
    // TODO: Push the double value and 2.5 using individual push calls
    
    // TODO: Call printContainer to display the doubles
    
    // TODO: Create GenericContainer<bool> with capacity 5
    
    // TODO: Push the boolean input and false
    
    // TODO: Call printContainer to display the booleans
    
    return 0;
}

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