[42서울] cpp07 구현

2024. 11. 26. 12:59·대외활동/42서울
728x90
반응형

cpp07은 c++의 template에 관한 과제이다.

 

ex00

#ifndef TEMPLATE_HPP
# define TEMPLATE_HPP

template <typename T>
void swap(T &a, T &b)
{
    T tmp;

    tmp = a;
    a = b;
    b = tmp;
}

template <typename T>
T min(T a, T b)
{
    return (a < b ? a : b);
}

template <typename T>
T max(T a, T b)
{
    return (a > b ? a : b);
}

#endif //TEMPLATE_HPP

 

 

함수 템플릿 (Function Template)

함수 템플릿은 특정 데이터 타입에 독립적인 함수를 정의할 때 사용된다. 예를 들어, 두 값을 교환하는 함수를 작성할 때 int, float, string 등 모든 데이터 타입에 대해 동일한 코드를 중복 작성할 필요 없이 템플릿을 사용할 수 있다.

 

ex01

#ifndef ITER_HPP
#define ITER_HPP

# include <iostream>

template <typename T>
void iter(T *array, int length, void (*f)(T const &))
{
    for (int i = 0; i < length; i++)
       f(array[i]);
}

template <typename T>
void iter(T *array, int length, void (*f)(T &))
{
    for (int i = 0; i < length; i++)
       f(array[i]);
}

#endif //ITER_HPP

 

함수를 인자로 받을 때, 함수의 인자로 const 타입과 const가 아닌 타입을 받을 수 있도록 구현해주었다.

과제 명세에는 써있지 않지만 평가지 요구사항에 const 타입과 아닌 타입을 둘다 테스트 하는 코드가 있어 구현하지 않으면 fail을 받는다.

 

ex02

#ifndef ARRAY_HPP
#define ARRAY_HPP

# include <iostream>

template<typename T>
class Array
{
private:
    unsigned int _n;
    T *_array;

public:
    Array() : _n(0), _array(NULL)
    {
    }

    Array(unsigned int n) : _n(n)
    {
       _array = new T[n]();
    }

    Array(Array const &obj) : _n(0), _array(NULL)
    {
       *this = obj;
    }

    ~Array()
    {
       delete[] _array;
    }

    Array &operator=(Array const &obj)
    {
       if (this != &obj)
       {
          delete[] _array;
          _n = obj._n;
          _array = new T[_n];
          for (unsigned int i = 0; i < _n; i++)
             _array[i] = obj._array[i];
       }
       return (*this);
    }

    unsigned int size() const
    {
       return _n;
    }

    T &operator[](unsigned int i)
    {
       if (i >= _n)
          throw std::out_of_range("Index out of bounds");
       return (_array[i]);
    }
};

#endif //ARRAY_HPP

 

클래스 템플릿 (Class Template)

클래스 템플릿은 다양한 데이터 타입에 대해 동작할 수 있는 일반적인 클래스 정의를 제공한다. 예를 들어, 동일한 로직의 스택 클래스가 필요하지만 데이터 타입이 다를 경우, 클래스 템플릿을 사용하여 코드 중복을 줄일 수 있다.

728x90
반응형

'대외활동 > 42서울' 카테고리의 다른 글

[42서울] inception 도커의 개념 (가상환경, 볼륨, 동작 원리)  (1) 2025.02.09
[42서울] cpp08 구현  (1) 2024.11.27
[42서울] Netpractice LEVEL 8 문제 풀이  (1) 2024.11.11
[42서울] minitalk 구현(Makefile 포함)  (0) 2024.08.22
[42서울] minishell 테스트 케이스  (0) 2024.08.11
'대외활동/42서울' 카테고리의 다른 글
  • [42서울] inception 도커의 개념 (가상환경, 볼륨, 동작 원리)
  • [42서울] cpp08 구현
  • [42서울] Netpractice LEVEL 8 문제 풀이
  • [42서울] minitalk 구현(Makefile 포함)
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
      • 공군 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    단일 사이클
    컴퓨터 구조 및 설계
    컴퓨터구조
    데이터패스
    사설 문제
    추가 문제
    C++
    자바
    명령어
    42서울
    컴공 포트폴리오
    자료구조
    메모리 계층 구조
    반복자
    오블완
    티스토리챌린지
    상속
    리눅스
    코틀린
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[42서울] cpp07 구현
상단으로

티스토리툴바