Menu
Coddy logo textTech

요약 - 제네릭 컨테이너

Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 104개 중 69번째.

challenge icon

챌린지

쉬움

이 장에서 템플릿에 대해 배운 모든 내용을 하나로 모으는 GenericContainer 클래스 템플릿을 만들어 보겠습니다. 요소를 동적으로 저장하고 템플릿 기술을 통해 유용한 연산을 제공하는 유연하고 타입 안전한 컨테이너를 만들 것입니다.

코드는 두 개의 파일로 구성됩니다:

  • GenericContainer.h: 여기에 클래스 템플릿을 정의하세요. GenericContainer는 다음을 수행해야 합니다:

    배열에 대한 포인터를 사용하여 요소를 동적으로 저장하고, 현재 크기와 용량을 추적합니다.

    다음 핵심 메서드들을 제공합니다:

    • 초기 용량(capacity)을 인자로 받는 생성자
    • 동적 메모리를 적절히 정리하는 소멸자
    • push(T value) — 컨테이너에 요소를 추가합니다 (이 챌린지에서는 용량이 항상 충분하다고 가정합니다)
    • get(size_t index) — 주어진 인덱스의 요소를 반환합니다
    • getSize() — 현재 요소의 개수를 반환합니다

    GenericContainer<T>&를 인자로 받아 모든 요소를 공백으로 구분하여 출력하고 줄바꿈을 수행하는 printContainer라는 함수 템플릿을 추가하세요.

    GenericContainer<bool>에 대해 1 또는 0 대신 true 또는 false를 출력하는 printContainer의 템플릿 특수화를 만드세요.

    GenericContainer<T>&와 임의의 개수의 값을 인자로 받아 폴드 표현식(fold expression)을 사용하여 각 값을 컨테이너에 넣는 pushAll이라는 가변 인자 함수 템플릿을 추가하세요.

  • main.cpp: 다섯 개의 입력을 읽습니다 (각각 별도의 줄에 있음):
    1. 첫 번째 정수
    2. 두 번째 정수
    3. 세 번째 정수
    4. double 값
    5. 문자열 형태의 불리언 (true 또는 false)

    다음을 통해 컨테이너를 시연하세요:

    1. 용량이 10인 GenericContainer<int> 생성
    2. pushAll을 사용하여 세 정수를 한 번에 추가
    3. 크기 출력: Int container size: <size>
    4. printContainer를 호출하여 정수들을 표시
    5. 용량이 5인 GenericContainer<double> 생성
    6. 개별 push 호출을 사용하여 double 값과 리터럴 2.5를 추가
    7. printContainer를 호출하여 double 값들을 표시
    8. 용량이 5인 GenericContainer<bool> 생성
    9. 불리언 입력값과 리터럴 false를 추가
    10. printContainer를 호출하여 불리언 값들을 표시 (true/false로 표시되어야 함)

예를 들어, 입력값이 10, 20, 30, 3.14, true인 경우:

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

이 챌린지는 컨테이너를 위한 클래스 템플릿, 사용자 정의 bool 출력을 위한 템플릿 특수화, 그리고 유연한 pushAll 함수를 위한 가변 인자 템플릿을 결합합니다. 여러분의 컨테이너는 RAII 원칙에 따라 자체 메모리를 관리하며, 템플릿이 적절한 리소스 관리와 어떻게 통합되는지 보여줍니다.

직접 해보기

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

using namespace std;

int main() {
    // 입력 읽기
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // string을 bool로 변환
    bool boolVal = (boolStr == "true");
    
    // TODO: 용량이 10인 GenericContainer<int> 생성
    
    // TODO: pushAll을 사용하여 세 정수를 한 번에 추가
    
    // TODO: 크기 출력: "Int container size: <size>"
    
    // TODO: printContainer를 호출하여 정수들을 표시
    
    // TODO: 용량이 5인 GenericContainer<double> 생성
    
    // TODO: 개별 push 호출을 사용하여 double 값과 2.5를 추가
    
    // TODO: printContainer를 호출하여 double들을 표시
    
    // TODO: 용량이 5인 GenericContainer<bool> 생성
    
    // TODO: boolean 입력값과 false를 추가
    
    // TODO: printContainer를 호출하여 boolean들을 표시
    
    return 0;
}

객체 지향 프로그래밍의 모든 레슨