STL remove_if() 질문드립니다.
글쓴이: sysmoon / 작성시간: 목, 2009/01/08 - 10:36오전
bool greater0(int value) { //return (value > 0); return true; } void CList::list_6_2_4() { cout << "list_6_2_4" << endl; init(); list<int>::iterator location; location = find(m_list_one.begin(), m_list_one.end(), 1); // erase m_list_one.erase(location); // remove : 리스트로부터 주어진 값을 모두 삭제, m_list_one.remove(1); // remove_if() : 조건을 만족하는 모든 값들을 삭제. // greater1 을 클래스 멥버 함수로 만들면 안된다. m_list_one.remove_if(greater0); // remove_if(m_list_one.begin(), m_list_one.end(), greater0); -> 이 함수는 안 먹힘 OutputList(m_list_one); }
list의 원소 삭제 테스트를 진행하는 도중 질문이 생겼습니다.
m_list_one.remove_if(greater0); -> 리스트의 멤버함수 remove_if() 함수는 정상 동작
remove_if(m_list_one.begin(), m_list_one.end(), greater0); -> 이 함수는 동작 암함.
generic 알고리즘 remove_if()는 동작 안하고, list의 멤버함수는 잘 됩니다. 이게 맞는건가요?
Forums:
remove_if 가 지울 값을
remove_if 가 지울 값을 뒤로 보내고 지울값 처음 위치를 반환하는것으로 알고 있습니다.
erase( remove_if(.. ));
로 하면 지워질겁니다.
list의 remove, removeif맴버는 algorithm의 remove, remove_if와 좀 다른 동작을 합니다.
list구조상 std::erase( std::remove(...) ) 계열쓰면 효율이 떨어 지게 때문에 그런 동작을 하는것을로 알고 있습니다.
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
댓글 달기