-
컨테이너 & 반복자 & 알고리즘 & 함수객체@ 16. 1 ~ 17. 1/STL 2014. 4. 10. 23:55
컨테이너
표준 시퀀스 컨테이너
: 컨테이너 원소가 자신만의 삽입 위치를 가지는 컨테이너(vector, deque, list : 선형적)
: 삽입되는 순서에 따라 원소의 위치가 결정되고 바뀌지 않습니다.
표준 연관 컨테이너
: 저장 원소가 삽입 순서와 다르게 특정 정렬 기준에 의해 자동 정렬되는 컨테이너(set, multiset, map, multimap : 비선형적)
: 삽입 순서와 상관없이 정렬 기준에 따라 원소의 위치가 결정됩니다.
또한 컨테이너는 데이터를 하나의 연속한 메모리 단위로 저장하느냐에 따라 두 가지로 나뉜다.
배열 기반 컨테이너 : 데이터 여러개가 하나의 메모리 단위에 저장(vector, duque)
노드 기반 컨테이너 : 데이터 하나를 하나의 메모리 단위에 저장(list, set, multiset, map, multimap)
반복자
포인터와 비슷하게 동작
반복자는 컨테이너에 저장된 원소를 순회하고 접근하는 일반화된 방법을 제공
컨테이너와 알고리즘이 하나로 동작하게 묶어주는 인터페이스 역활
포인터와 같은 특징들
1.반복자는 컨테이너 내부의 원소를 가르키고 접근할 수 있어야 한다(*연산자 제공)
2.반복자는 다음 원소로 이동하고 컨테이너의 모든 원소를 순회할 수 있어야 합니다.(++, !=, == 비교연산자 제공)
STL의 모든 컨테이너는 자신만의 반복자를 제공한다.
멤버함수 begin()과 end()가 순차열의 시작과 끝을 가리키는 반복자를 반환한다.
*순차열 : 원소의 순서있는 집합을 의미
*vector와 deque는 임의 접근 반복자를 제공합니다.
예를 들어
iter[0] 또는 iter+=2 이런식..배열기반이므로 된다는것이다
알고리즘
알고리즘은 한 쌍의 반복자(begin, end)를 필요로하며 몇몇 알고리즘은 임의 접근 반복자를 요구함.
함수객체
함수 객체는 함수처럼 동작하는 객체이다. 함수처럼 동작하려면 객체가 ()연산자를 정의해야한다.
다시말해 ()연산자를 오버로딩한 객체이다.
sort 알고리즘에 함수 객체less 와 greater를 적용하면
vector<int> v;
sort(v.begin(), v.end(), less<int>()); // 오름차순 정렬
근데 less는 템플릿 클래스 이므로<int> 자료형 지정을 해서 less<int>() 라고 해야한다.
어댑터
구성 요소의 인터페이스를 변경합니다. STL 어댑터로는 컨테이너, 반복자, 함수 어댑터가 있다
대표적인 컨테이너 어댑터가 stack 이다 stack 컨테이너 어댑터는 일반 컨테이너를 LIFO방식의 스캑 컨테이너로 변환한다.
'@ 16. 1 ~ 17. 1 > STL' 카테고리의 다른 글
set 컨테이너 (0) 2014.04.17 deque & list 컨테이너 (0) 2014.04.16 STL list 주요 특징 정리 (0) 2013.05.27 STL vector / deque 주요 특징 정리 (0) 2013.05.27 vector<STL> 사용하기(2) (0) 2013.03.18