CPP_어소_60_iterator(1)

CJB_ny·2022년 7월 2일
0

CPP_AROTHO

목록 보기
59/83
post-thumbnail
post-custom-banner

iterator

vector, list와 같은 자료구조 내에서

데이터를 넣었을 때

iterator를 통해 내부에 데이터를 접근 하기도 하고,

순회 할 수도 있게 만들어주는 "반복자"이다.

vector의 경우

이런식으로 operator나 멤버함수로 순회 씹가능 하지만,

vector도 iterator가 내부에 구현되어있음.

ㅇㅇ.

vector< int > :: iterator

list< int > :: iterator

이 두 클래스는 서로 다른 클래스 안의

iterator의 객체이다.

어떤 자료구조든

표준 라이브러리에서 제공하는 자료구조에서는

iterator 제공을 보장한다.

레퍼런스로 반환하기 때문에

힙메모리에있는 주소를 반환하고 있다.

참조를 반환하는 객체가 veciter이다.

다음주소 가보리기

증감연산자로 접근이 가능하다.

그리고 당연히 내부 동작방식은 다르다.

vector라는 자료형은

왜 iterator의 객체를 만들어서 접근하는게

조금 비효율적인거같은데..??? operator 제공을 하니까...

근데 꼭 그렇지만은 않다.

중간에 삭제 하고싶은 경우에 우짤래??

앞으로 당겨야함.

앞으로 당겨야 dataCount혼동엎이 push_back으로 데이터 넣을꺼 아니가? ㅄ아.

제거하는 함수 없나요??

시발 erase있는데 인자로 시발 iterator를 요구하노?

지역변수명이 where노ㅋㅋ

iter가 가르키고있는 현재 부위를 삭제하겠다.

(컨테이너마다 공통적으로 구현되어있다)

list iterator 활용? ❗❗

list 의 경우 모든 데이터를 순회하고싶다면,

list < int > :: iterator iter = listInt.begin();

for (iter = listInt.begin(); iter != listInt.end(); ++iter)
{ }

end()가 지칭하는 의미미가 뭐냐고노? => listInt의 tail부분? => 아니다.

만약 끝부분이라면 for문에서 != 일 경우 ++iter를 하면서 반복하는데

마지막 부분오면 같지 않아서 뭐 안되지 않나??

그래서

iterator에서의 iter라는 Container안에 넣어놓은 end를 지칭할 경우에는 뭘 지칭 하냐면 '끝' 그다음을 지칭

데이터가 3개라고 했을 때,

그래서 end()는 끝부분 보다도 그 다음 마지막을 지칭한다.

그래서 ++iter 하면서도 iter != listInt.end()에 안걸리고 순회 씹가능.

진짜 완전 마지막을 가르키는 것은

"end iterator"이다.

profile
https://cjbworld.tistory.com/ <- 이사중
post-custom-banner

0개의 댓글