C++ template

템플릿

쳄플릿이란 자료형을 나중에 지정 될 수 있도록 만들어주는 문법이다.

#include <iostream>
using std::cout;
using std::endl;
template <class T> T Max(T i, T j)
{
    return i>j ?i:j;
}
int main(){
    cout<< "Max값은=" << Max(1,2)<<endl;
    cout<< "Max값은=" << Max(7.5,3.6)<<endl;
    cout<< "Max값은=" << Max('A','B');
    return 0;
}
다양한 자료형이 입력되는 상황에 템플릿으로 해결한 예제
  • 입력된 매개변수에 따라 자료형이 정해지도록 할 수 있다.
  • class라고 쓴 자리 대신 typename을 작성해도 작동한다
#include <iostream>
using std::cout;
using std::endl;
template <typename T, typename T2>
class CCC1{
    T x;
    T2 y;
    public:
    CCC1(T xx, T2 yy) {x=xx;y=yy;}
    void Print(){ cout<<x<<','<<y<<endl;}
};

int main(){
    CCC1<int, int> c1(10,20);
    CCC1<double, double> c2(3.5,5.5);
    CCC1<char, const char *> c3('I', "Love");

    c1.Print();
    c2.Print();
    c3.Print();
    return 0;
}

STL

C++ 표준 라이브러리 일부분으로 자료구조 알고리즘을 미리 만들어 둔 라이브러리다.

컨테이너

  • 객체를 저장하는 객체나 클래스
  • 시퀀스 컨테이너
    • vector, deque, list
  • 연관 컨테이너
    • set, multiset, map, multimap
  • 연속 메모리 기반 컨테이너
    • 데이터 여러개를 하나의 메모리 단위에 저장
    • 배열 기반
    • vector, string, deque
  • 노드 기반 컨테이너
    • 데이터 하나를 하나의 메모리 단위에 저장
    • list, set, multiset, map, multimap

반복자

  • 컨테이너에 저장된 요소를 순화하고 접근하는 객체나 클래스

알고리즘

  • 데이터 처리 함수
  • find, sort, search

함수 객체

  • 함수처럼 동작하는 객체
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
    vector <int> x;
    x.push_back(1);
    x.push_back(2);
    for(int i = 0 ; i < x.size() ; i++)
    cout << x[i] << endl;
    return 0;
}
vector 예제

예외처리

컴파일 에러 외, 런타임 에러를 처리하기 위한 C++의 방법이다

사용법

관련 키워드

키워드 의미
try 예외를 감시하는 블록으로, main마저 포함할 수 있다
throw 예외가 발생하면 알리고 내용을 담아 던짐
catch 예외를 받아 처리하는 블록
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void Div(double ja, double mo)
{
    try{
        if (mo == 0) throw mo;
        cout<<"결과:"<<ja/mo<<endl;
    }
    catch(double) {
        cout << "cant't div with 0";
    }
} 

int main()
{
    double x, y;
    cout <<"분자를 입력하세요=";
    cin>>x;
    cout <<"분모를 입력하세요=";
    cin>>y;
    Div(x, y);
    return 0;
}