1. STL 함수는 펑터나 함수의 주소를 매개변수로 받는 경우도 많으며

   함수의 경우 함수 포인터를 이용해 호출하고 펑터의 경우 객체를 받으면 해당 객체의 () 연산자를 통해 호출한다

   대표적인게 for_each()


2. 펑터는 제너레이터(매개변수가 없음), 단항 함수(매개변수 1개), 이항 함수(매개변수 2개) 의 개념에서

   bool 값을 리턴 여부까지 분류하여 종류를 나눈다

   왜 이런식으로 나누냐면 STL 함수가 오버로딩으로 구현되있는데 

   매개변수의 개수 또는 bool값을 통한 비교연산을 하는 함수로 나눠져있기 때문이다


3. 산술 연산자들은 이미 정의된 펑터가 있으며

   이들은 공통적으로 매개변수 형에 typedef 으로 정의된 first_argument_type, second_argument_type, 

   반환형으로 result_type 을 가져 다른 함수에 개방되있어 순응성 펑터라 부른다

   간단한 예제로 binder(1st or 2nd), bind(1st or 2nd) 로 매개변수 둘중 한 값을 상수화 시켜 

   기능이 똑같지만 매개변수가 하나인 객체를 만들거나 매개변수가 하나인 객체로서 반환 할 수 있다


4. STL 알고리즘은 4그룹으로 나뉜다

   1. 변경 불가 시퀸스 연산 (트리 같은게 아닌 배열과 같은 직선형) 연산 - find, for_each 같은거

   2. 변경 가능 시퀸스 연산 - copy, transform 같은거

   3. 정렬 및 그와 관련된 연산 - sort, union(합집합) 같은거

   4. 일반화한 수치 연산 (배열의 특성) - numeric 헤더에 있다


5. 알고리즘 4그룹에서 2가지 버전으로 또 나눈다

    1. 제자리 버전(실행시 요소들이 제자리에 머물음, 안바뀜)

    2. 복사 버전(컨테이너 내 요소들의 위치가 바뀌는 함수) 

    

    복사 버전은 replace_copy 와 같이 _copy 가 달리며 복사 될 자리를 입력하기 위한 이터레이터 매개변수를 하나 더 요구함

    그리고 복사 된 값의 바로 다음 위치를 지시하는 이터레이터를 반환한다

    

    조건부 복사도 있는데 이 경우 replace_copy_if 와 같이 _if 가 붙으며 비교 연산을 통해 bool값을 리턴하는 펑터나 함수를 요구한다

    

    복사의 경우 대상이 되는 컨테이너의 요소들이 밥뀌지만 

    리스트 계열 컨테이너 함수의 경우 스마트 포인터 마냥 소유권을 뺏어오는 잘라내기의 형태도 있다


6. 결합 컨테이너 map 의 경우 [] 연산자 오버로딩으로 저 안에 키 값을 집어넣으면 해당 키로 된 값을 알려주거나 대입 가능


7. valarray 헤더에 있는 valarray 클래스는 컨테이너들과 다르게 수치 배열을 처리하기 편한 연산자들을 제공한다


8. initializer_list 헤더에 이니셜라이저 리스트 템플릿 클래스를 매개변수로 쓰면 {} 연산자로 여러 요소를 초기화 할 수 있게 만들어준다


9. iostream 헤더 선언시 8개의 스트림 객체가 생성되는데

  이는 cin, cout, cerr, clog 과 wchar 버전을 뜻한다


10 . 으아앙 쉬발 입출력 스트림은 너무 많아

     입출력 스트림은 비트마스크를 통해 플러그를 셋팅 할 수 있고

     iostream 헤더에서 여러 함수들을 지원한다 끗 ^오^