'swap'에 해당되는 글 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; *b = *a; *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; } |
이렇게 말이죠..? 너무 비효율적이죠. 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; } |
이러면 어떤가요? 이렇게 하면 어떤 자료형이라도 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 |
감사합니다.
'프로그래밍 > Language' 카테고리의 다른 글
[C#] C++에서 사용하는 typedef , C#에서 사용할 수 없을까? (0) | 2016.12.12 |
---|---|
[C++] Inline 함수에 대하여! (0) | 2016.12.05 |
[C++] friend, 프렌드? 친구? 넌 무엇이냐. (0) | 2016.11.30 |
[C++] 출력시 소수점 자리 조절 (0) | 2016.11.28 |
[C++] const에 대하여 (0) | 2016.07.28 |