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서울] 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서울] so_long 그래픽, mlx 라이브러리 (0) | 2024.08.11 |