템플릿

JeongChaeJin·2021년 2월 15일
0

cpp_basic

목록 보기
1/6

1. 템플릿 이란 ?

  • 워드 프로세서 등에서 미리 준비되어있는 레이아웃 포맷 같은 것과는 다르다.
  • 일부분을 변경하여 몇 번이라도 사용할 수 있는 문서 포맷이나 데이터

2. 템플릿 함수

  • 인수나 반환 값의 형을 모호한 상태로 정의하는 함수

  • 복수의 형에 대응하는 함수를 만들 수 있다.

  • 컴파일러는 템플릿 함수를 호출하는 부분을 발견하면, 이것들을 구체적인 함수로 만든다.

    template<class T>
    T GetMax(T a, T b)
    {
    		   T buf ;
        ...
  • 여기서 class T 는 템플릿 인수이다. 임의의 형명임.

  • int 나 double 형으로 치환된다.

  • 함수의 인수, 반환 값에 템플릿 인수를 사용한다.

  • 호출하는 방법

    int n1 = 100, n2 = 200, ret;
    ret = GetMax(n1, n2);
    ...
    • 템플릿 인수가 int 로 치환된다.
  • 템플릿 함수를 이용하면 int, double 형으로 된 2개의 함수를 하나로 만들 수 있게된다. (장점)

3. 템플릿 클래스

  • 사용하는 형을 모호한 상태로 정의하는 클래스

  • 복수의 형에 대응하는 클래스를 만들 수 있다.

    template<class T>
    class Rectangle {
    public :
    	...
      T GetRight() {
      	return left + width;
          }
      ...
      
      T left, top, width, height ;
    } ;
    • 아직 형이 확정 되지 않았기 때문에 임시로 T형으로 만든다.
    Rectangle<int> rect ;
    Rectangle<double> rect ;
    • 템플릿 클래스의 오브젝트 생성 시 사용할 형을 지정한다.
  • 템플릿 인수가 2개 이상일 경우 형을 복수로 지정할 수 있다.

    template<class T1, class T2>
    class Rectangle {
    ...
    } ;
    ...
    
    Rectangle<int, char> rect ;
    

4. 표준 템플릿 라이브러리

  • Standard Template Library (STL)
  • 배열 같은 복수의 데이터를 관리하기 위한 클래스가 있다.

    (참고) 복수의 데이터를 저장하여 고나리하는 오브젝트를 "컨테이너 오브젝트" 라고한다.

  • 종류 : vector, list, queue, stack 클래스

    vector class

    • 메모리가 부족한 경우 자동적으로 메모리를 확보한다.

    • 배열로 사용할 수 있다.

    • 일반 배열과 달리 사이즈에 신경 쓰지 않아도 된다는 장점이 있다.

      #include <vector>
      #include <iostream>
      
      using namespace std ;
      
      int main()
      {
      	vector<int> v1 ;
       
       v1.push_back(10); // int 형을 저장하는 vector 오브젝트 생성
       v1.push_back(11);
       
       cout << "요소의 개수 : " << (int) v1.size() << endl ; // 요소 갯수 출력
       cout << "v1[0] = " << v1[0] << endl ;
       cout << "v1[1] = " << v1[1] << endl ;
       return 0;
      }
    • 배열의 요소수를 정하지 않아도 되므로 편리하다 !

      iterator 클래스

    • 반복자

    • 이 클래스의 오브젝트를 사용하면, 컨테이너 내부의 데이터에 동일한 방법으로 접근할 수 있다.

    • iterator 의 오브젝트는 컨테이너 오브젝트 내부의 한 요소를 가리킨다.

      #include <vector>
      #include <iostream>
      
      using name space std ;
      
      int main()
      {
      	vector<int> v1 ;
       v1.push_back(10);
       v1.push_back(11);
       v1.push_back(15);
       
       vector<int>::iterator itr_first, itr_last, i;
       itr_first = v1.begin() ;
       itr_last = v1.end() ;
       
       for (i = itr_first; i != itr_last ; i++) {
       	count << *i << endl ;
       }
       
       return 0;
      }
    • vector 클래스 에서 이터레이터를 사용할 경우 위와 같이 사용한다.

    • iterator 에서 값에 접근할 경우 *를 붙인다.

    • 모든 요소를 추출하려면 이터레이터의 카운터를 증가시킨다.

      • ex) v1.begin() + 1
profile
OnePunchLotto

0개의 댓글