2009-04-25 5 views
11

Iterator를 전달하고 다른 함수로 전달해야하지만 특정 요소를 건너 뛰도록 필터링했습니다 (포인터 범위이므로 NULL 포인터를 필터링해야합니다).boost :: filter_iterator - 어떻게 STL로 그렇게 할 수 있습니까?

"stl 필터 반복기"검색 방법을 보려면 boost::filter_iterator이 나타났습니다.

멋지게 보이고 사용할 수 있지만 좋은 오래된 STL로도 할 수 있을까요? 물론 새로운 컨테이너에 요소를 복사하지 않고.

필자는 필요한 begin(), end() 등의 함수를 제공하고 필터링을 수행하는 다른 반복기 클래스를 만들어야한다고 생각하십니까? 그래서 정확히 다시 구현해야 할 것입니다 boostiterator_filter ...?

답변

8

정확합니다. 필터 반복자를 본질적으로 다시 만들 것입니다. Boost의 filter_iterator를 사용하는 것이 좋습니다. Boost는 C++에서 가장 많이 사용되는 외부 라이브러리와 같은 특수한 상태를 가지고 있습니다. 많은 C++위원회 위원들이 후원을 위해 도서관을 작성하는 일을 도왔습니다. 그것의 편재성은 본질적으로 거의 - stl을 만듭니다; 여기에 바퀴를 재발견 할 이유가 없습니다.

+3

약간 부정적 : 부스트가 설치하기가 번거롭고 때로는 여분의 의존성을 원하지 않는 경우가 있습니다. 필자는 실제로 filter_iterator를 다시 작성하지 않을 것이라고 생각한다. 실제로 제대로 작성하는 것은 매우 어렵다. –

4

나는 rlbond와 동의합니다. 바퀴를 다시 만들지 말고 Boost :: filter_iterator를 사용하십시오. 프로젝트에 모든 라이브러리를 추가하고 싶지 않은 경우 boost.bcp을 사용하여 필요한 라이브러리를 정확하게 추출 할 수 있습니다.

관련 문제