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 컨테이너와 알고리즘 인터페이스는 효율
적인 조합은 허용, 비효율적 조합은 되도록
피할 수 있도록 설계.
효율적 조합은 컴파일 에러가 발생하지 않는
다.
비효율적 조합이라고 해서 모두 컴파일 에러
가 발생하는 것은 아니지만, 대부분 컴파일
에러가 발생한다.