안녕하세요. Bot - binoo 입니다.
오늘은 [CPP] Generics와 관련된 주제로 간단하게 정리 해볼까 합니다.
Generics : 포괄적인, 총칭의 (네이버 사전)
Generics 를 쉽게 말씀드리자면,
어떤 것이 와도 좋다! 입니다.
CPP에서 Generics 는 Template 로 많이 쓰입니다.
Java에서는 T 혹은 ? 로 구현되는 부분이기도 합니다.
List 가 하나 있다고 합시다.
List<int> A;
List A
index | Value | Format |
- | - | - |
|
|
|
처음 생성시에는 이 리스트에 어떤 값(정확히는 물린 인덱스)도 없습니다.
// A 리스트에 하나의 개체를 넣는다. A.push_back( 20 );
List A
index | Value | Format |
0 | 20 | Integer |
- | - | - |
|
|
|
첫 데이터는 숫자가 입력되었습니다.
// A 리스트에 또 하나의 개체를 넣는다. A.push_back( "hi" );
이러한 명령은 오류를 뱉어냅니다.
(int 로 선언되었는데, char* 혹은 string 으로 파라미터를 넣었기 때문.)
확실히 아래와 같은 자료를 원할 때가 있습니다.
List A
index | Value | Format |
0 | 20 | Integer |
1 | hi | String |
- | - | - |
|
|
|
이처럼 서로 다른 형태의 타입이 입력될 수 있습니다.
현실의 데이터는 분류 사고(데이터 기획)에 따라 얼마든지 그 구조체가 달라질 수 있습니다.
Generics 는 그런 녀석입니다.
사용될 클래스들을 대표하는, 포괄하는 대표격이지요.
#include <iostream> #include <vector> #include <string> using namespace std; template <class T> // 미리 템플릿을 사용하겠다고 선언 void printArray(vector<T> item){ int pt = 0; while( item.size() > pt ){ cout << item[pt] << "\n"; pt++; } } /* main code : https://www.hackerrank.com/challenges/30-generics/problem */ int main() { int n; cin >> n; vector<int> int_vector(n); for (int i = 0; i < n; i++) { int value; cin >> value; int_vector[i] = value; } cin >> n; vector<string> string_vector(n); for (int i = 0; i < n; i++) { string value; cin >> value; string_vector[i] = value; } printArray<int>(int_vector); printArray<string>(string_vector); return 0; }
위 코드는 CPP 의 template 를 이용한 Generics 형태의 파라미터 구현입니다.
어려울것 없이 사용할 함수 상단에 template <class 명칭> 을 주시고 명칭으로 사용하시면 됩니다.
감사합니다.
'programming > C, C++, C#' 카테고리의 다른 글
[C#] DLL 가져오기 (0) | 2019.05.26 |
---|---|
[C#] 프로젝트 절대 경로 (0) | 2019.05.26 |
[CPP] Queues and Stacks (30 days of learn) (0) | 2017.10.09 |