iterator

2022. 12. 10. 22:33개인공부/C++

가변배열 클래스안에 또다른 클래스인 iterator 를 만들어 보았다.

inner clas 의 경우에는 포함하고 있는 클래스의 private 멤버에 접근이 가능하다.

 

iterator 의 경우에는 가변배열내의 배열을 가리키는 기능을 하며

iterator 가 가리킬 데이터를 관리하는 가변배열 주소데이터들의 시작 주소가리키는 데이터의 인덱스 값 을

3가지의 인자로 가지고 있다

만약에  iterator 가 가변배열의 주소를 가지고 있지 않으면 배열의 크기가 커졌을때 

데이터을의 시작주소가 달라지므로 조건을 이용하여 가변배열이 확장한지 안한지를 알 수 있다.

* 연산자의 경우에는 포인터와 유사하게 리턴값을 이터레이터가 가리키는 배열의 데이터 값을 받아온다.

 

다음으로는 ++ 증감 연산자를 구현했다

조건들을 확인하였고 iterator의 마지막 칸의 index값을 -1로 정하였다.

왜냐하면 iterator 의 기능중에 지칭한 배열의 앞에 새로운 배열을 끼워넣는 함수를 제작하기 위해서 

마지막 칸을 임으로 만들었다.

후위 연산자의 경우에는 레퍼런스를 적지않는다

그리고 후위연산자를 표시를 해주기위해서 ( int)를 넣으면 컴파일러가 자동으로 후위연산자로 

컴파일을 해준다 그후에는 리턴값에 대해서 생각을 해야하는데 후위연산자의 경우 값을 그대로 받아서

계산을 해주고 증감을 해주어야하기 때문에 또다른 임의의 이터레이터를 만들고 그값을 리턴갑으로

주어서 해결하였다.

 

예전부터 강의에서 반복문의 경우에는 전위연산자를 사용하라고 했었는데 오늘 후위연산자의 작동방식에

대해서 알고 이해할 수 있었다. 후위연산자의 경우에는 함수내에서 한번더 새로운 이터레이터와 리턴값을 다시

원래 메임함수내에 값을 보내주면서 불필요한 과정을 소모하게된다.

 

그후에는 조건을 다르게해서 감소 연산자도 만들었다.

비교 연산자의 경우에는 서로다른 이터레이터를 비교해서 같으면 참값 다르면 거짓을 반환해주기 때문에

이터레이터가 가리키는 가변배열이 같은지 확인을 해야하고 같은 인덱스값을 가리키지 확인을 해주어야한다.

 

다음으로는 생성자에 관한 이야기이다 생성자는 기본적으로 사용자가 정의하지 않으면 기본생성자가 자동으로

생성되는데 여기서 주의할 점은 만약에 내가 다른 생성자를 지정해줬다면 그후에는 기본생성자가 생성되지 않는다는

점이다. 이것이 중요한 이유가 만약에 복사생성자를 정의하게되면 자동으로 기본생성자가 생성되지 않는다.

여기서 복사생성자는 생성자 ()내에 클래스 자료형을 이용하여 바로 같은 멤버를가지는 클래스를 만드는 방법이다.

 

그리고 이 복사생성자에서

iterator NewA = OldA; 이라고 했을때 컴파일러는 이것을 대입연산자로 받아들이지 않고 생성자로 받아들이는 점이중요하다

 

'개인공부 > C++' 카테고리의 다른 글

tree  (0) 2022.12.12
iterator (list)  (0) 2022.12.11
template class list  (0) 2022.12.09
참조자 &  (0) 2022.12.08
class(3)  (0) 2022.12.07