C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[38652] [질문] STL에서 predicate 를 순수 함수로 만들라고 하는데...?
진수.네모 [miman101] 816 읽음    2005-01-06 11:19
Effective STL 항목 39 를 보면  Predicate 를 순수 함수(pure function)으로 만들어라...
라고 합니다...

하지만 순수 함수로 만들면 객체는 자기 정보를 가질수 있고 이를 관리 할 수 있어야 할텐데 그 장점이
없어 지는 것이 아닐까요?

책에 나와 있는 예제 입니다.
class BadPredicate : public unary_function<Widget, bool>
{
public:
    BadPredicate() : timesCalled(0) {}
    bool operator()(const Widget&)
    {
        return ++timesCalled == 3;
    }
private :
    size_t timesCalled;
}

vector<Widget> vw;
...
vw.erase(remove_if(vw.begin(), vw.end(), BadPredicate()), vw.end());

이렇게 하면 세번째 Widget 객체 뿐만 아니라 여섯번재 Widget 객체 까지 없애 버린다고 합니다.
아무리 생각을 해봐도 세번째만 없어 질꺼 같은데... 이부분 설명해 주실수 있나요.

remove_if 에 대한 필자의 간단한 표현 입니다.
template <typename FwdIterator, typename Predicate>
FwdIterator remove_if(FwdIterator begin, FwdIterator end, Predicate p)
{
    begin = find_if(begin, end, p);
    if(begin == end) return begin;
    else {
        FwdIterator next = begin;
        return remove_copy_if(++next, end, begin, p);
    }
}

술어 구문을 만들때 항상 순수 함수로 만들라고 필자는 강조하는데 ... 그 예를 보이지 않고 장을 끝내버리더군요.
머리가 짧은 관계로 이해를 못하고 있답니다.
순수 함수 처럼 만들면... 함수자의 특성을 못살리는 것 아닌가요?
혹시 이장에 대해 알고 있다면 답변 부탁드립니다.

그럼 좋은 하루 되세요.

+ -

관련 글 리스트
38652 [질문] STL에서 predicate 를 순수 함수로 만들라고 하는데...? 진수.네모 816 2005/01/06
38676     Re:[질문] STL에서 predicate 를 순수 함수로 만들라고 하는데...? 김윤동.제라툴 859 2005/01/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.