Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

승쨩개발공부

[STL] 반복자 (iterator) 본문

STL

[STL] 반복자 (iterator)

Unknowns 2021. 12. 8. 16:43

반복자

-> 객체이다.

-> 포인터의 사용 방법을 토대로 연산자 오버로딩하여 구현 객체.

-> 컨테이너마다 데이터의 저장 방식이 다르기 떄문에 순회하는 방법 또한 달라진다.

-> 이러한 방법들을 획일화하기 위해 반복자를 만들어 놓았다.

-> 반복자는 컨테이너의 원소를 가리키는 것.

 

 

반복자 선언

-> 각 컨테이너 내부에 구현되어 있다.

-> 스코프 연산자를 통해서 접근한다.

 

 

front와 back

front : vector의 첫 번쨰 원소에 접근

back : vector의 마지막 원소에 접근

 

 

 

반복자 초기화

-> 컨테이너가 반복자를 반환하게 하면 된다.

 

반복자를 초기화하기 위해 대입을 시도하게 되는데,

여기서 대입 연산자 기준 좌측은 객체이기 떄문에

객체 타입을 통해서 초기화를 진행해야 한다.

 

vector.front와 vector.back은 int형 이므로 타입이 달라 불가능하다.

하지만 vector안에 begin()과 end()라는 멤버 함수가 존재한다

 

begin() : 첫 번쨰 원소의 위치를 가리키는 반복자를 반환

end() : 마지막 원소 다음 위치를 가리키는 반복자를 반환

 

 

 

반복자를 통한 원소 순회

 

 

 

반복자의 종류

임의 접근 반복자, 양 방향 접근 반복자, 순 방향 접근 반복자, 입력 반복자, 출력 반복자

 

 

#1. 임의 접근 반복자

-> 배열 기반 컨테이너들이 가지는 반복자이다.

++, --, [], +=, -=

 

 

 

#2. 양 방향 접근 반복자

-> 노드 기반 컨테이너들이 가지는 반복자이다.

++, --

 

 

 

vector의 중간 삽입

insert(#1, #2)

#1 : 삽입할 위치를 가리키는 반복자.

#2 : 삽입할 데이터.

 

 

중간 삽입 후 확인 방법 두 가지

#1. 배열 형식

 

#2. 반복자 형식

반복자 형식에서 실행을 하면 메모리 누수가 발생한다.

이것을 '반복자의 무효화' 라고 한다.

 

 

반복자의 무효화

원소를 삽입하면 개수가 달라지면서 end의 위치가 변하게 된다.

반복자의 위치가 변하게 될 경우 반복자의 무효화가 발생한다.

 

메모리 개수를 초과하는 삽입의 시도가 있을 경우 재할당 및 복사가 발생한다.

재할당을 하는 순간 begin 또한 위치가 무효화된다.

 

그렇기 떄문에 메모리 개수를 초과하는 삽입의 시도가 있을 경우

반복자 초기화를 해줘야 한다.

 

 

 

중간 삭제

erase()

'STL' 카테고리의 다른 글

[STL] vector의 메모리정책, 생성자, reserve  (0) 2021.12.08
[STL] 조건자 (algorithm)  (0) 2021.12.08
[STL] vector  (0) 2021.12.08
[STL] 컨테이너 종류  (0) 2021.12.07
[STL] STL이란?  (0) 2021.12.07