'template'에 해당되는 글 1건

  1. 2016.11.30 [C++] Swap 함수! Template를 이용해서 구현해보자!
2016. 11. 30. 13:51

안녕하세요. 게임개발자 놀이터입니다.


이번 포스팅에선 C++로 Swap 함수를 짜보려고합니다.


흔히 Swap 함수를 짠다고 하면 자료형 int에 한애 대부분 이렇게 짤것입니다.


1
2
3
4
5
6
void Swap(int *a, int *b)
{
    int temp = *b;
    *= *a;
    *= temp;
}
cs


int형에 한에 정말 간단하고 편한 방법이지요.


main에서는 다음과 같이 사용할것입니다.

1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
 
    int a =10;
    int b =50;
 
    cout<<"*** Swap 함수 실행 전 2개의 값 : "<<a<<" , "<<b<<" ***"<<endl;
    Swap(&a,&b);
    cout<<"*** Swap 함수 실행 후 2개의 값 : "<<a<<" , "<<b<<" ***"<<endl;
 
    return 0;
}
cs


실행 결과는 다음과 같겠죠??


하지만 여기서 Swap을 숨겨저 포인터 인자인지를 모른다면..??


한번쯤은 이렇게 쓰고 싶어질것입니다.


1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
 
    int a =10;
    int b =50;
 
    cout<<"*** Swap 함수 실행 전 2개의 값 : "<<a<<" , "<<b<<" ***"<<endl;
    Swap(a,b);
    cout<<"*** Swap 함수 실행 후 2개의 값 : "<<a<<" , "<<b<<" ***"<<endl;
 
    return 0;
}
cs


그럼 Swap 함수는 이렇게 고쳐야 할꺼애요.


1
2
3
4
5
6
void Swap(int &a, int &b)
{
    int temp = b;
    b = a;
    a = temp;
}
cs


어느게 더 좋아 보이나요??


뭐.. 사용자에 다를테니.. 자세한 의견댓글로 남겨주시면 감사하겠습니다..


하지만 위의 방식은 int자료형에 한정되어있다는점이 아쉽죠.


char는? float는?


그럼 그때마다 함수를 계속 새로 만들어야 할까요?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Swap(int &a, int &b)
{
    int temp = b;
    b = a;
    a = temp;
}
 
void Swap(float &a, float &b)
{
    float temp = b;
    b = a;
    a = temp;
}
 
void Swap(char &a, char &b)
{
    char temp = b;
    b = a;
    a = temp;
}

cs


이렇게 말이죠..? 너무 비효율적이죠. Swap이란 이름을 가진 함수는 뭐든간에 2개의 자리 또는 서로 교체 한다는 뜻일텐데 말이죠.


그래서 Template를 이용합니다.


1
2
3
4
5
6
7
template<typename T>
void Swap(T &a, T &b)
{
    T temp = b;
    b = a;
    a = temp;
}

cs


이러면 어떤가요? 이렇게 하면 어떤 자료형이라도 Swap이 가능합니다.


밑은 풀소스입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
 
using namespace std;
 
template<typename T>
void Swap(T &a, T &b)
{
    T temp = b;
    b = a;
    a = temp;
}
 
 
int main()
{
 
    int a =10;
    int b =50;
 
    cout<<"*** Swap 함수 실행 전 2개의 값 : "<<a<<" , "<<b<<" ***"<<endl;
    Swap(a,b);
    cout<<"*** Swap 함수 실행 후 2개의 값 : "<<a<<" , "<<b<<" ***"<<endl;
 
    return 0;
}
cs


감사합니다.


Posted by 시리시안