/ TIL

C++ STL이란 무엇인가? - 1

C++ STL이란 무엇인가?

1. STL이란??

: 표준 c++ 라이브러리를 말한다. (Standard Template Library)

2. STL의 구성

1) Container

객체들을 저장하는 자료구조이다. Sequence Container와 Associative Container로 나뉜다. Sequence Container에는 array, vector, list, deque 등이 있고, Associative Container에는 set, multiset, map, multimap이 있다.

2) Iterator

컨테이너에 포함된 원소를 가르킨다.

3) Algorithm

정렬, 삭제, 검색, 연산 등이 포함되어 있는 함수 템플릿이다.

4) Container Adaptor

stack, queue, priority_queue 등이 있다.

5) Allocator

메모리의 할당과 해제를 해주는 객체

6) Function Object

함수처럼 동작하는 개체로 Operator() 연산자를 overloading한 객체이다.

3. STL를 제대로 활용하기 위해 알아야 할 것

1)클래스(Class)

: 객체지향 언어를 경험했다면 반드시 알아야할 기본적 개념이다. 객체지향은 OOP로 Object-oriented programming을 말한다. 클래스를 설명할 때 대부분 붕어빵 비유를 많이 사용하는데, 붕어빵은 보통 붕어빵 틀에 의해서 만들어진다. 붕어빵 틀은 설계도 같은 개념이고, 붕어빵 틀이 있다면 붕어빵은 얼마든지 만들 수 있다. 그래서 클래스는 붕어빵 틀, 즉 설계도라고 할 수 있다. 그리고 만들어진 각각의 붕어빵, 즉 설계물을 객체(Object)또는 인스턴스(Instance)라고 한다. 클래스는 변수 뿐만아니라 함수들도 포함할 수 있다.

//public처럼 접근 제어와 관련된 키워드를 사용한다.
//멤버 변수와 함수를 정의할 수 있다.
class 클래스명
{
	public:
	멤버변수
    
    멤버함수
};

멤버함수는 일반 함수와 거의 같다. (overload, argument사용) 하나 다른 것은 함수 호출 시에 객체명을 명시해야한다.

2)함수 객체

: 함수처럼 동작하는 객체(Object)이다. 함수 객체는 함수처럼 호출이 가능하다. 객체를 함수처럼 호출하기 위해서는 ‘()’ 연산자 정의가 필요하다. ‘()’ 연산자를 오버로딩하는 것이다.

void print() {
	cout << "print" << endl;
}

struct functionObj{
	void operator() {
    	cout << "함수 객체" << endl;
    }
};

int main() {
	functionObj func;
    
    print();
    func(); //멤버함수 호출 funcObj.operator()
     
    return 0;
}

함수 객체의 장점은 속도가 일반 함수보다 빠르고, 일반 함수에서 할 수 없는 지원을 받을 수 있다.

 class Sum {
 	int total;
    
    public:
    	explicit Sum(int n = 0) : total(n) {}
        
        int operator() (int n)
        {
        	return total += n; 
        }
        }
 };
 
 int main()
 {
 	Sum sum(0);
    
    cout << sum(10) << endl;
    cout << sum(100) << endl;
    cout << sum(200) << endl;
    
    return 0;
 }