본문 바로가기
KNOU/C++

[C++ 프로그래밍]템플릿

by bottlesun 2022. 12. 1.
728x90

컨테이너 클래스

객체를 저장하는 클래스

클래스 템플릿의 선언 형식

template <templateParameters>
class ClassTemplateName {
	......
}
  • templateParameters : 템플릿 매개변수 목록
  • → 자료형을 받을 템플릿 매개변수 : ‘typename T’ 또는 ‘class T’ 로 표기(T 는 사용자 정의 명칭)
  • classTemplateName : 클래스 템플릿 이름

클래스 템플릿의 선언

매개변수 T의 값에따라, 달라진다.

template <typename T>
class Stack {
	T *but; // buffer pointer
	int top; // stack top
	int size; // 스택의 크기
public :
	Stack(int s); // 생성자
	virtual ~Stack(); // 소멸자
	bool full() const;
	bool empty() const;
	void push(const T & a);
	void push(T&& a);
	T&& pop();
};

표준 템플릿 라이브러리

표준 템플릿 라이브러리(STL) 이란?

  • c++에 제공되는 표준 컨테이너 클래스 템플릿 라이브러리
  • 벡터, 리스트, 스택, 큐 등의 컨테이너와 이들을 처리하는 연산을 포함한 데이터를 저장하기위한 템플릿 집합

STL의 구성 요소

  • 컨테이너(container) : 데이터 저장
  • 반복자(iterator) : 포인터의 역할순방향(++ 연산자 사용), 양방향(++ — 연산사 자용), 랜덤 액세스 임의 위치로 이동
  • → 포인터의 개념이 일반화 된 것
  • 알고리즘(algorithm) : 데이터 처리 기능
  • → 컨테이너의 원소에 대해 적용할 수 있는 여러가지 연산이 가능

순차 컨테이너

  • 동일한 자료형의 객체들을 선형적인 구조로 저장함
  1. vector
    • 크기의 확장이 가능한 배열
    • [ ] 연산자로 지정한 첨자를 이용하여 빠른 직접 접근
    • 끝에 삽입 or 삭제 하는 것은 빠르나 그 외 위치에는 느리다
  2. list
    • 이중 연결 리스트
    • 어느 위치든 삽입이나 삭제가 효율적
    • 직접 접근이 비효율적이므로 제공 x
  3. deque
    • vector 와 list 의 혼합 형태로, 이들의 특성이 모두 필요 할 때 사용할 수 있으나 성능이 안좋음

연상 컨테이너

  • 탐색트리와 같은 인덱스 구조를 이용
  • 키를 이용한 검색 기능 제공
  1. set
    • 키 객체만 저장, 키가 중복되지 않음
  2. multiset
    • 키 객체만 저장하며, 동일한 키가 중복될 수 있음
  3. map
    • (key, value) 저장
    • 키 중복 x
  4. multimap
    • map 과 같지만 동일한 키가 중복 가능

무순서 연상 컨테이너

  • 연상 컨테이너 처럼 키를 이용한 검색기능 제공
  • 해시함수를 이용하여 데이터 검색 시간 일정

unordered_[map, set …]

  • 위의 검색기능 제공 내용과 같으니 해시함수를 이용하여 저장 및 검색

컨테이너 어뎁터

  • 기본 컨테이너를 기반으로 특정 용도에 맞게 유도된 컨테이너
  1. 큐(queue)
    • FIFO 구조
  2. priority_queue
    • 우선순위에 따라 데이터를 액세스 하고 있는 구조
  3. stack
    • LIFO 구조
728x90

'KNOU > C++' 카테고리의 다른 글

[C++프로그래밍] 예외처리  (0) 2022.12.01
[C++ 프로그래밍]연산자 다중정의  (0) 2022.12.01
[C++ 프로그래밍] 클래스와 객체  (0) 2022.12.01
[C++ 프로그래밍] 함수  (1) 2022.12.01

댓글