본문 바로가기
개발/C++

12장 템플릿, 벡터, 스택

by 민돌이2 2019. 5. 13.

한성대학교 김설현교수님 강의내용을 바탕으로 작성함

 

템플릿의 기본함수와 클래스에서 유형을 매개변수화  하는 기능(int, double 등 템플릿 T로 합칠 수 있다.)

int maxValue(int val1, int val2) { if (val1 > val2) ‌‌return val1; else ‌‌return val2; } double maxValue(double val1, double val2) { if (val1 > val2) ‌‌return val1; else ‌‌return val2; } char maxValue(char val1, char val2) { if (val1 > val2) ‌‌return val1; else ‌‌return val2; } string maxValue(string val1, string val2) { if (val1 > val2) ‌‌return val1; else ‌‌return val2; }

 

다른 자료형에 대한 템플릿화

template <typename T1, typename T2> void myprint(T1& a, T2& b) { ‌cout << a << " " << b << endl; }

cpp파일에 구현시 컴파일 못하는 경우가 많아 헤더파일에 구현까지한다.

GenericStack.h 

#ifndef STACK_H #define STACK_H template<typename T> class Stack { public: Stack(); bool empty() const; T peek() const; void push(T value); T pop(); int getSize() const; private: ‌T elements[100]; int size; }; template<typename T> Stack<T>::Stack() { ‌size = 0; } template<typename T> bool Stack<T>::empty() const { return (size == 0); } template<typename T> T Stack<T>::peek() const { return elements[size - 1]; } template<typename T> void Stack<T>::push(T value) { ‌elements[size++] = value; } template<typename T> T Stack<T>::pop() { return elements[--size]; } template<typename T> int Stack<T>::getSize() const { return size; } #endif

main.cpp

template<typename T> void printStack(Stack<T>& stack) //참조에 의한 전달 { while (!stack.empty()) ‌‌cout << stack.pop() << " " << endl; } int main() { ‌Stack<int> intStack; // int형 stack 생성 for (int i = 0; i < 3; i++) ‌‌intStack.push(i); printStack(intStack); ‌Stack<string> stringStack; // string형 stack 생성 ‌stringStack.push("Chicago"); ‌stringStack.push("Denver"); printStack(stringStack); system("pause"); return 0; }

실행 결과

 

STL과 벡터 클래스

STL(Standard Template Library)는 템플릿을 사용해 만들어진 라이브러리

STL속 vector클래스는 배열처럼 크기가 고정된다는 제한이 없이 크기가 자동증가 되므로 유연한 사용 가능

#include <iostream> #include <string> #include <vector> using namespace std; int main() { ‌vector<int> intVector; //int형 빈 벡터 생성 for (int i = 0; i < 5; i++) ‌‌intVector.push_back(i + 1); ‌cout << "intVector: "; for (int i = 0; i < intVector.size(); i++) ‌‌cout << intVector[i] << " "; ‌vector<string> stringVector; // string형 빈 벡터 생성 ‌stringVector.push_back("Dallas"); ‌stringVector.push_back("Houston"); ‌stringVector.push_back("Austin"); ‌cout << "\nstringVector: "; for (int i = 0; i < stringVector.size(); i++) ‌‌cout << stringVector.at(i) << " "; ‌stringVector.pop_back(); // 마지막 벡터 삭제 ‌stringVector[0] = "Atlanta"; //벡터[0]변경 ‌cout << "\nAtfter stringVector: "; for (int i = 0; i < stringVector.size(); i++) ‌‌cout << stringVector.at(i) << " "; ‌cout << endl; system("pause"); return 0; }

실행 결과

 

728x90

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

16장 예외처리  (0) 2021.12.09
15장 상속과 다형성  (0) 2021.12.09
14장 연산자 오버로딩  (0) 2021.12.09
13장 파일 입력과 출력  (0) 2019.05.21
11장 포인터와 동적 메모리 관리(후)  (0) 2019.05.09
11장 포인터와 동적 메모리 관리(전)  (0) 2019.05.08
10장 객체 지향 개념  (0) 2019.02.11
9장 객체와 클래스  (0) 2019.01.19

댓글