Skip to content

Latest commit

 

History

History
187 lines (121 loc) · 3.12 KB

19.template.md

File metadata and controls

187 lines (121 loc) · 3.12 KB

템플릿

컴파일 단계에서 타입을 결정짓는 기능입니다.

타입이 다양하게 바뀔 수 있습니다.

아래의 형태로 사용가능합니다.

template <typename T>

물론 여러개를 지정해도 됩니다.

template <typename T1, typename T2>

아래와 같이 작성하면, 클래스안에서도 사용가능 합니다.

template <class T>

함수를 호출시에는 이렇게 쓰입니다.

함수명<int or char or ect..>();

사용 예시

  • 함수
#include<iostream>

using namespace std;

template<typename t>
void out() {
    cout << typeid(t).name() << endl;
}

int main() {
    out<int>();

    return 0;
}
  • 함수 활용
#include<iostream>

using namespace std;

template<typename t>
void out(t data) {
    cout << typeid(t).name() << endl;
    cout << data << endl;
}

int main() {
    out(10);
    out(3.14);
    out("a");

    return 0;
}
  • 클래스
#include<iostream>

using namespace std;

template<typename t>
void out(t data) {
    cout << typeid(t).name() << endl;
    cout << data << endl;
}

class test
{
public:
    test();
    ~test();

private:

};

int main() {
    out<test>();

    return 0;
}
  • 열거체
#include<iostream>

using namespace std;

template<typename t>
void out() {
    cout << typeid(t).name() << endl;
}

enum enum_test
{
    a,
    b,
    c
};


int main() {
    out<enum_test>();

    return 0;
}

Vector

표준 템플릿 라이브러리 중의 하나인 템플릿 클래스입니다.

어떤 타입이라도 저장할 수 있지만, 한 번에 한 타입만 저장이 가능합니다.

요소에 접근하거나, 앞 또는 뒤에 요소를 추가하거나 삭제할 수 있고, 크기를 알 수 있는 멤버 함수를 제공하고도 있습니다.

Queue

자료 구조의 한가지로, 먼저 집어 넣은 데이터가 먼저 나오는 구조로 저장하는 형식을 말합니다.

나중에 집어 넣은 데이터가 먼저 나오는 스택과는 반대되는 개념입니다.

Stack

큐와 반대되는 개념으로, 제한적으로 접근할 수 있는 나열 구조입니다.

접근 방법은 언제나 목록의 끝에서만 일어납니다.

Vector, Queue, Stack 실습

(본 내용은 챕터22에서 vector, queue, stack 실습을 진행합니다.)

STL

표준 템플릿 라이브러리라고 하며, 일반적으로 자료구조와 같은 알고리즘을 구현해 놓은 라이브러리의 모음입니다.

(본 내용은 챕터22에서 자세히 설명합니다.)

스마트 포인터

  • auto_ptr (c++17에서 사라졌습니다. 쓰지마시기 바랍니다.)
  • unique_ptr
  • shared_ptr
  • weak_ptr

장점

  • 자동 청소
  • 자동 초기화

(본 내용은 스터디 현장에서 실습을 진행하지 않습니다.)

과제

  • 과제-1 : 템플릿으로 함수 호출시 오버로딩을 구현하기

  • 과제-2 : 두 수를 교환하면서 변수 타입을 같이 출력하는 swap()함수를 작성하기

  • 과제-3 : STL로 linkedlist를 구현하여 스터디에서 진행했던 linked list 코드와 차이점 알아보기

힌트 :

#include <list>