해결된 질문
작성
·
312
·
수정됨
0
안녕하십니까 강사님 항상 고생하십니다.
list에 대해서 복습을 하던 중 의문점이 생겨 질문 드립니다.
해당 강의의 중간 삽입/삭제와 임의접근의 모순에 대해선 내용을 이해 했습니다.
여기서 생기는 의문점이 그렇다면 remove()는 왜 구현해 놨을까? 입니다.
remove()는 동작할 때 리스트항목을 모두 순회하여 해당 값을 지우는 걸로 알고 있습니다.
이것 또한 지우는 것 자체는 빠르겠으나 그전에 하는 순회는 리스트의 크기가 커질수록 아주 느릴텐데, 그 위치를 기억하고 있던 것도 아니고 왜그런 remove()를 임의접근처럼 막아 놓지 않았는지 궁금합니다!
답변 1
0
ㅋㅋㅋ 글쎄요 재밌는 질문이네요.
정확한 답은 C++ 표준 위원회에서만 알테니,
저도 뭐라 답변을 드릴 수가 없지만
그냥 삭제와 다르게 list의 remove는 정말 해당 값을 가진 애들을
다! 지워주기 때문에 1개만 지우는 상황과는 다르게
그래도 조금 더 효율성이 좋으니 그렇지 않을까? 싶네요
헉... 주말에도 답변을 해 주시다니 감사합니다
오호 그렇군요. 말씀하신 것 처럼 하나만 지우는 것이 아닌 해당 값을 모두 지우기 위한 경우를 위한 함수라고 생각하면 납득이 갑니다.
값을 하나만 지워야하는 경우는 그 값을 하나만 기억해주면 되지만, 다수일 경우 일일이 그에 해당하는 기억 변수를 선언해주는 것도 비효율적이니 느리더라도 remove함수로 빼서 관리하는 것이 효율적이겠네요!
또 만약 그런 경우가 빈번하게 일어난다면 프로그래머가 직접 그 때마다 remove()를 구현 하는 것 보다 처음부터 list에 구현 해 놓는 것이 또 효율적일 수 도 있겠군요!
감사합니다! 덕분에 가려웠던 부분이 해결된 것 같습니다.