remove(3)
-
[effective STL] 항목 33 : remove 같은 알고리즘 사용할 때 포인터 컨테이너 주의
동적으로 할당한 객체를 관리하는 컨테이너가 있을 때 주의해야 한다는 것이다. 상황(예시)widget 객체를 동적으로 여러개 선언하고 이를 관리하는 v라는 widget 포인터 백터가 있다고 가정한다. 12345678910111213clss Widget{public: ... bool isCertified() const; ...}; vector v; ...v.push_back(new Widget);...cs widget 객체 중에 certified 되지 않은 위젯을 지우고 싶다! 12v.erase(remove_if(v.begin(), v.end(), not1(mem_fun(&Widget::isCertified))), v.end());cs not1과 mem_fun 함수들을 사용해 본 적은 없는데.. 대충 아닐때..
2016.02.29 -
[effective STL] 항목 32 : 요소 정말로 제거하기
정말 중요한 핵심remove는 어느 것도 "진짜로" 없애지 않는다. 없앨 수 없기 때문이다.책에서 이 문장을 아주 중요하게 두 번이나 반복하고 있다. 님아.. 근데 list는 지워지긴 하잖아욤.... 이건 멤버 함수라 이건가? https://github.com/ElementalKiss/Cpp/blob/master/Example/RealEraseElementInContainerUsingRemoveAndErase.cpp 예시우리가 자주 사용하는 vector를 예로 들면, 1234567 vector intVec; const int VEC_SIZE = 10; intVec.reserve(VEC_SIZE); for (int i = 0; i 00114444??(remove : 2가 삭제되지 컨테이너가 정말 삭제되진 ..
2016.02.28 -
[effective STL] 항목 09 : 데이터를 삭제할 때에도 조심스럽게 선택
Erase VS Remove연속 메모리 컨테이너(vector, deque, string)- erase와 remove 합성문이 가장 좋은 방법이다. 양방향 반복자를 지원하는 list에도 통하지만, list는 remove를 사용하는 것이 좋다. 표준 연관 컨테이너일 때에는(set, multiset, map) remove라는 이름을 가진 어떤 것도 소용없다.remove 알고리즘을 사용하면 컨테이너 값을 덮어써서 컨테이너를 변형시킬 수 있다.하여간 안되고, 연관 컨테이너는 erase를 사용한다.(로그시간)*시퀀스 컨테이너에 사용하는 remove 방법은 선형 시간.연관 컨테이너의 erase는 상등성이 아닌 동등성에 기반하고 있다. remove_if조건을 이용하여 해당 요소를 삭제하고 싶을 때 사용한다. 벡터에서 ..
2015.09.07