CPP_어소_65_erase (1)

CJB_ny·2022년 7월 7일
0

CPP_AROTHO

목록 보기
64/83
post-thumbnail

오늘 할 것은 erase

선언부는 이렇게된다

인자 생각하면 원본을 수정하지 않겠다라는 것임.

반환타입이 iterotor이고

(그러면 일단 원본을 수정하지 않고 뭘 하겠다는 거네?)

사용법

표준 라이브러리에서 제공하는 vector로 일단 본다.

push_back 4번 호출하고 iterator생성해주고

vecInt의 erase 호출하는데 인자로 veciter를 넣어주도록 한다.

그러면 100 없어질듯?

실행

erase를 하고 iter로 vecIte의 원본을 받으면

예외처리가 발생한다.

*vecIter가 가르키고있는것은 200인데 꺼내올려면 문제가 발생한다.

이렇게 다시 begin을 받고 다시 받으면 문제가 없음.

erase 인자 분석 ❗

erase로 삭제된 다음 요소를 가르키는 iterator를 되돌려주는 것이다.

삭제된 다음요소를 가르키는 그런 iterator를 주겠다라는 것이다.

그래서 이거보면 반환타입이 iterotor인것이다.

인자로 들어온 녀석이 삭제된 곳을 가르키는 iterator이고,

그렇게 삭제를 하고 나면은

(iterator를 다시 생성해서 반환하나?)

그래서 이렇게 받아왔어야된다.

200을 지운 경우 ❗

++vecIter를 넣어주면 뭘 가르키냐 이제

int i = *vecITer는 => 300이다.

(뒤에 다 삭제되는 것인가...??)

class private 접근

inner class에서는 자신의 부모 클래스의 private 접근 가능,

but,

부모 클래스?에서는 inner class의 private에 접근이 불가능하다.

=> 친구선언

friend 선언 (모든 클래스들 끼리 가능) ❗❗

iterator클래스 내부에 선언 해주도록 하자.

A에서 친구선언하면 A에서는 B의 private접근이 가능하게 하고싶으면

B class에서 friend class CArr로 해주어야

A가 -> B에 접근이 가능하다.

웬만하면 열어주지마라

멤버함수로 private에 접근이 가능하도록 열어주어야한다.

C#의 프로퍼티를 사용하는것과 비슷 한듯?

erase구현

m_pArr이 iterator의 가변배열 주소임.

이게 뭐랑 같아야 하노?

this랑 같아야지 븅신아.

다르면? => 호출한 객체와 iterator가 같지 않은 상황이다.

다른 주소를 가지고있는데 지운다? => ㅄ임?

iter.m_pArr != this가 무슨 말이냐?

그림으로 보면은

erase를 하는 iterator가 다른 가변배열을 가르키고 그곳을 삭제하는 꼴임.

ㅇㅋ?

잘못된 상황예시

vecInt, vecInt2 이렇게 같은 vector< int > 이다.

vecInt2의 begin을 iterator로 받아와서 그 iter에 ++하고 erase를 한 것이다.

그냥 말이 안됨.

예외처리 ❗

  1. iterator가 다른 가변배열 쪽 요소를 가르키는 경우

  2. iterator가 end iterator인 경우

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

0개의 댓글