CPP_어소_61_iterator (2)

CJB_ny·2022년 7월 3일
0

CPP_AROTHO

목록 보기
60/83
post-thumbnail

가변배열에서의 iterator

private의

T* == 8바이트, int 두개 8바이트

long long == 8바이트

그러면 가변배열 CArr객체를 하나 만들면 몇 byte노?

=> 24바이트하면 바보병신임.


iterator 클래스가 안에 선언되어있네?

CArr(가변배열) 객체 하나만들면,

iterator애도 뭐 시발 서비스로 딸려 들어오는 것이노?

ㄴㄴ. 아님

완전 별개의 "자료형"이다.

vector는 벡터고

애는 애대로 객체를 따로 또 만들었다.

집 예시 👍👍

집 만들었는데 책상도 같이 안 만들어진다.

다 다른 클래스 ❗❗👍👍

각각 다 다른 클래스

vector까지는 템플릿이고 < T > 정해주면

그런 타입의 클래스가 만들어 지는 것이고,

그런 클래스 안에 구현되어있는 iterator이기 때문에

다들 서로 다른 자료형이다.

inner class구현

iterator는 뭘 알아야하나

시작주소, 인덱스

iterator container는 시작주소랑 인데스 번호 알면 씹가능임.

CArr클래스 안에 일단 T* 템플릿 자료형의 시작 주소(dataAddr)이랑

indexNumber 가지고 있도록 하자.

iterator 반환, 선언 위치 👍

지금 begin을 vector int :: iterator veciter가

받고있는데

받을 수 있는 이유가 begin함수의 반환 타입이 iterator이기 때문이다.

그러면 begin은 vecInt의 멤버 함수이니까

먼저 begin함수를 vector < T >의 멤버 함수로 선언을 해준다.

그런데 반환이 iterator 인데 이것을 먼저 위에 선언해놓으면 컴파일러가 iterator 클래스가 있는지 없는지 모르기때문에

"전방 선언" 만 해주고 뒤에 다시 구현해준다.

그러면 굳이 begin함수 위치 옮길 필요가 없다.

begin 함수 구현 ❗❗❗

beign -> Ctrl + '+' + '.' =>

이런데 반환타입이 iterator이고 CArr< T > :: being 맞는데

특정 type이라는 것을 명시하기 위해서

typename이라고 명시를 해준다음에

CArr < T > 의 iterator가 반환타입이고

CArr < T > :: (의) begin() 함수를 구현한다는 말이다.

흐름👍👍👍

지역변수로 iterator iter를 선언해준다. => iterator 객체의 생성자가 호출되면서 초기값을 셋팅한다.👍👍

iter.m_pData는 지금 begin함수를 호출 하는 객체의 m_pData를 받고,

iter의 indexNumber는 0으로 할당해주고

이 iter객체를 반환을 해주어야한다.

그러면 iter를 반환받은 쪽에서는 begin함수를 호출한 객체가

자신의 m_pData를 알고 m_iIndx를 아는 상태이고

지금 iter라는 객체는 begin함수가 종료가되면 스택에있다가 사라짐.

iterator생성자 오버로딩.👍👍

현재 iterator iter라는 객체를 만들어서

해당 객체의 m_pData, m_iIdx의 값을 할당을 해서 iter를 컨테이너를 반환하고있는데

이럴꺼면 생성자를 오버로딩해서 반환하는게 더 효율 좋을듯.

이렇게 오버로딩 해줄 수 있을 것이다.

그러면

이랫던 부분이.

이렇게 수정이 가능하다.

그런데 지금 지역변수를 만들고 바로 반환해주는데

이것을 또한,

임시객체

이렇게 변수명을 짓지도 않고 바로 반환 해준다.

(임시객체를 만들어 줘버리고 바로 반환 하는 것임)

operator 구현해야할 것들

업로드중..

전위/후위, --, ==, != 다 만들어야함.

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

0개의 댓글