내가 STL에 조예가 깊어서 글을 남기는 것이
아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면
지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필
STL 알고리즘 중 동작이 제일 혼동스러운 함수를 손꼽으라면 단연 remove가 뽑힌다. 왜냐하면 함수명이 ... 햇갈리기 때문이다.
remove 알고리즘을 호출하여 컨테이너 내부의 값들을 지울려고 한다해도, 컨테이너 내부의 값들은 지워지지 않는다. 왜냐하면 remove 함수는 이터레이터를 인자로 받기 때문에, 어떤 컨테이너에서 값을 지워야 하는지 알 수 없기 때문이다.
그런고로, remove 류의 모든 함수들(unique, remove_if)은 값을 지우지 않는다. 그 대신에 지워야 할것을 빼둔 마지막 이터레이터를 뱉어낸다.
이런 특성이기 때문에. erase 함수와 붙여서 사용하면, 완벽한 조화를 이루어지게 된다는 것이다.
즉 이렇게 사용 하면 된다.
하지만 컨테이너들의 멤버함수 remove 는 ... 지워주므로 꼭 기억해 두자.^^
관련링크
http://lagoons.net/tt/599
http://jeddli.tistory.com/entry/STL-컨테이너에서-특정한-값을-가진-객체-지우기
STL 알고리즘 중 동작이 제일 혼동스러운 함수를 손꼽으라면 단연 remove가 뽑힌다. 왜냐하면 함수명이 ... 햇갈리기 때문이다.
remove 알고리즘을 호출하여 컨테이너 내부의 값들을 지울려고 한다해도, 컨테이너 내부의 값들은 지워지지 않는다. 왜냐하면 remove 함수는 이터레이터를 인자로 받기 때문에, 어떤 컨테이너에서 값을 지워야 하는지 알 수 없기 때문이다.
그런고로, remove 류의 모든 함수들(unique, remove_if)은 값을 지우지 않는다. 그 대신에 지워야 할것을 빼둔 마지막 이터레이터를 뱉어낸다.
이런 특성이기 때문에. erase 함수와 붙여서 사용하면, 완벽한 조화를 이루어지게 된다는 것이다.
즉 이렇게 사용 하면 된다.
하지만 컨테이너들의 멤버함수 remove 는 ... 지워주므로 꼭 기억해 두자.^^
관련링크
http://lagoons.net/tt/599
http://jeddli.tistory.com/entry/STL-컨테이너에서-특정한-값을-가진-객체-지우기
'책 정리 > Effective STL' 카테고리의 다른 글
항목 37 : 범위 내의 데이터 값을 요약하거나 더하는 데에는 accumilate나 for_each를 사용하자 (1) | 2008.09.05 |
---|---|
항목 36 : copy_if를 적절히 구현해 사용하자 (0) | 2008.09.03 |
항목 35 : 대소문자를 구분하지 않는 문자열 비교는 mismatch 아니면 lexicographical_compare를 써서 간단히 구현할 수 있다. (0) | 2008.09.03 |
항목 34 : 정렬된 범위에 대해 동작하는 알고리즘이 어떤 것들인지 파악해 두자 (0) | 2008.09.03 |
항목 33 : remove와 비슷한 알고리즘을 포인터의 컨테이너에 적용할 때에는 각별히 조심하자. (0) | 2008.09.02 |
항목 31 : 정렬시의 선택 사항들을 제대로 파악해 놓자. (0) | 2008.09.02 |
항목 30 : 알고리즘의 데이터 기록 범위(destination range)는 충분히 크게 잡자 (0) | 2008.07.28 |
항목 29 : 문자 단위의 입력에는 istreambuf_iterator의 사용도 적절하다. (0) | 2008.07.27 |
항목 28 : reverse_iterator에 대응되는 기점 반복자(base iterator)를 사용하는 방법을 정확하게 이해하자. (1) | 2008.07.27 |
항목 27 : const_iterator를 iterator로 바꾸는 데에는 distance와 advance를 사용하자. (0) | 2008.07.27 |
최근댓글