STL Chapter4

Download Report

Transcript STL Chapter4

iterator
 반복자는 포인터와 유사한 객체. STL알고리즘이
컨테이너에 저장된 객체들의 시퀀스를 순회하며
접근.
 컨테이너와 제네릭 알고리즘 사이를 이어주는 중
간자 역할.
 입력 반복자, 출력 반복자, 순방향 반복자, 양방향
반복자, 임의 접근 반복자 – 5종류
 STL의 모든 알고리즘은 반복자를 통해 시퀀스를
접근. first/last 로 구성된 반복자 한 쌍을 사용.
 모든 알고리즘 마다 반복자를 받아들이는 수준이
다르다.
반복자가 가리키는 위치의 요소를 * 연산
자로 읽기 가능. 읽는 것만 가능하므로 요
소의 값변경 불가능.
전위형, 후위형의 ++ 연산자 사용. 같은
타입의 반복자와 상등 비교도 가능.
입력 반복자라는 용어는 한 가지 타입을
지칭하는 것이 아니다.
앞에서 언급한 요구 조건을 만족하는 반복
자를 입력 반복자라고 한다.
find는 단방향으로 이동하며 값을 찾기 때
문에 입력 반복자를 인자로 받습니다.
Template<typename InputIterator,
typename T>
InputIterator find(InputIterator first,
InputIterator last, const T& value);
* 연산자를 사용하여 요소의 내용을 변경.
쓰기만 가능하면 출력 반복자라고 할 수
있으며 읽기 기능이 필수는 아니다.
다음 요소로 이동하는 ++연산자 지원.
출력은 입력과는 달리 무조건적이어서 범
위 점검을 위한 ==, != 연산자는 필수가
아니다.
전진하면서 기록 가능하다는 조건만 만족
하면 출력 반복자라고 할 수 있다.
입력 반복자 + 출력반복자
읽기와 쓰기가 모두 가능.
한쪽방향으로 순회 가능.
같은 위치를 여러 번 읽고 쓸 수 있다.
반복자를 저장. 반복자가 가리키는 위치에
서 언제든지 재순회 가능.
한 위치를 여러 번 읽고 쓸 수 있기 때문에
다중 패스 알고리즘을 지원.
역방향 이동이 가능한 반복자.
순방향 이동을 위한 ++ 연산자, 역방향의 이
동을 위한 -- 연산자도 전위형, 후위형으로 각
각 구현.
역방향으로 검색, 모든 요소의 순서를 반대로
뒤집을 때는 앞뒤로 자유롭게 이동해야 하므
로 역방향 반복자가 필요.
STL 컨테이너 중 이중 연결 리스트로 구현되
어 있는 list가 양방향 반복자 제공.
순방향 반복자의 기능을 포함.
양방향 반복자에서 지원하는 모든 연산을 지
원.
추가지원(r,s임의 접근 반복자, n정수표현식)
r+n, n+r, r-n
r[n], *(r+n)과 동일
r+=n, r-=n (양방향 빅 점프)
r-s (정수 값 리턴)
r<s, r>s, r<=s, r>=s (bool 값 리턴)
입력 반복자
출력 반복자
순방향 반복자
양방향 반복자
임의 접근 반복자
입력 또는 출력 반복자를 필요로 하는 알
고리즘은 순방향이나 양방향, 임의접근 반
복자와도 함께 사용.
순방향 반복자를 필요로 하는 알고리즘은
양방향 또는 임의 접근 반복자와도 함께
사용.
양방향 반복자를 필요로 하는 알고리즘은
임의 접근 반복자와도 함께 사용.
컨테이너 클래스에 대한 설명에는 컨테이너
클래스가 제공하는 반복자 부류가 명시.
제네릭 알고리즘에 대한 설명에는 주어진 알
고리즘과 함께 사용할 수 있는 반복자 부류가
명시.
Ex) list-양방향 반복자, find-입력 반복자
find알고리즘은 list컨테이너와 사용.
Ex) list-양방향 반복자, sort-임의 접근 반복자
list컨테이너에서 sort알고리즘 사용불가.
반복자 계층 구조는 STL 설계에 담겨진 기본
개념을 잘 보여준다.
STL 컨테이너와 알고리즘 인터페이스는 효율
적인 조합은 허용, 비효율적 조합은 되도록
피할 수 있도록 설계.
효율적 조합은 컴파일 에러가 발생하지 않는
다.
비효율적 조합이라고 해서 모두 컴파일 에러
가 발생하는 것은 아니지만, 대부분 컴파일
에러가 발생한다.