1158번 - 요세푸스 문제
오늘 처음 STL list를 사용해봐서 연습겸 이걸 사용해서 풀어보고 있습니다..
이 코드에 input으로 7,3을 넣고 디버깅을 하면 it가 list의 마지막 요소를 참조할 때 it++를 수행하면서 'cannot increment end list iterator'라는 메세지를 뿜고 강제 중단됩니다.
iterator가 반복자니까 맨 앞으로 돌아갈 줄 알았는데 안되네요..
아직 많이 수행을 못해봐서 로직이 맞는지도 모르겠지만 저 에러나는 부분을 어떻게 해결해야 하는지 도와주시면 감사하겠습니다.
끝에 도달하면 처음으로 되돌리면 되지 않나요?
if ( it == L.end() ) it = L.begin();
std::list<int>::iterator 의 ++연산자에는 그런 기능이 없습니다. 위 댓글처럼 반복자를 맨 앞으로 돌리시거나, 필요하면 원하는대로 동작하도록 직접 구현하셔야합니다.
한국어로 번역한 결과가 '반복자'라고 해서 진짜로 '반복'하는건 아닙니다;;
감사합니다. 하나 더 질문해도 될까요?
이건 질문방에서 본 코드인데 앞의 분 말씀처럼 반복자를 맨 앞으로 돌려주진 않았는데 정상 작동이 됩니다.
제가 볼 땐 잘 모르겠어서 뭔가 처리된 부분이 있을까요?
22번째 줄에서 it == L.end()가 되면 for문을 탈출하고, 다시 21번째 줄의 while 때문에 22번째 줄에서 it = L.begin()로 바뀝니다
it가 L.end() - 1일 때부터 따라가보세요
아!!! 감사합니다
댓글을 작성하려면 로그인해야 합니다.
btfnswt 3년 전
오늘 처음 STL list를 사용해봐서 연습겸 이걸 사용해서 풀어보고 있습니다..
이 코드에 input으로 7,3을 넣고 디버깅을 하면 it가 list의 마지막 요소를 참조할 때 it++를 수행하면서 'cannot increment end list iterator'라는 메세지를 뿜고 강제 중단됩니다.
iterator가 반복자니까 맨 앞으로 돌아갈 줄 알았는데 안되네요..
아직 많이 수행을 못해봐서 로직이 맞는지도 모르겠지만 저 에러나는 부분을 어떻게 해결해야 하는지 도와주시면 감사하겠습니다.