anacoluthon   3년 전

링크된 정답 처리된 코드 와

밑에  코드(오답 처리된 코드) 입니다.

두 코드의 차이라면 출력방식만 다르게 하였을 뿐인데

(배열로 데이터들을 옮긴 뒤 출력하는 방식과 제거해야할 수를 찾음과 동시에 출력하는 방식)

다른 결과가 나오는 이유를 모르겠습니다. 

제가 생각하기에는 출력방식의 문제가 아니라 외적인 문제(cout의 문제 or erase의 문제)같다고 생각되어 이를 알고싶어 질문하였습니다.

hakddal707   3년 전

32번 줄이 잘못되었습니다.

*l.begin() 을 출력하면 이 소스로도 정답받으실겁니다.

hakddal707   3년 전

이미 짐작하셨겠지만 erase는 삭제한 요소의 바로 다음 iterator를 return 시킵니다.

그래서 마지막 while문을 돌고 지운 요소의 인덱스가 마지막에 남는 요소의 인덱스보다 뒤에있으면 오류가 납니다.

while문을 계속 도는동안은 22-26줄이 그것을 커버해줬지만, 마지막 루프에서 지우고 나올땐 보정이 불가능하기때문에 결국 인덱스 범위를 초과한 곳을 출력하려하고

에러로 이어지게됬습니다.

ex)

4 3 

10 6

anacoluthon   3년 전

늦은 시간에 명쾌한 답변주셔서 감사합니다.

마지막 원소를 제거함으로써 while문을 탈출했을 때 iterator가 l.begin()으로 이동하게끔 설정하지 않아 문제가 되었던 거군요.

말씀해주셨던 erase했을 때 iterator의 위치 변화 때문에 문제풀때 고생 많이했었는데 답변을 통해 많이 배우고간 것 같습니다. 감사합니다!!


 

댓글을 작성하려면 로그인해야 합니다.