cmk5378   4년 전

9명의 키를 다 합친 후 두 명씩 빼서 100이 되면 반복문을 빠져나와 출력하도록 프로그램을 구현했는데요

백터에서 요소를 삭제한 구간에서 자꾸 에러가 났었습니다.

처음에는 이렇게 썼는데

v.erase(v.begin() + i);

v.erase(v.begin() + j); 


아래처럼 이렇게 순서를 바꾸어 주니까 오류가 해결되었어요. 이유가 뭔지 알고 싶습니다. 알려주시면 감사하겠습니당!! 도와주세용!!

v.erase(v.begin() + j); 

v.erase(v.begin() + i);


djm03178   4년 전

벡터에서 erase를 하면 지워진 원소 이후의 모든 원소들이 전부 한 칸씩 앞으로 당겨집니다. 그래서 i번째를 지우면 원래 i+1번째였던 것이 i번째가 되고, 원래 I+2번째였던 것이 i+1번째가 됩니다. 그런데 이 코드에서는 j가 i보다 크니까 i번째를 지우는 순간 원래 j번째였던 것이 j-1번째로 바뀌기 때문에 이후 j번째를 지우면 안 되게 됩니다. 반면에 j번째를 먼저 지우는 건 i번째 원소의 위치에 영향을 주지 않기 때문에 문제가 되지 않습니다.

cmk5378   4년 전

아 간단한 부분을 간과하고 있었네요 감사합니다!!!ㅠㅜㅠ

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