2012-06-14 3 views
15

나는 std::vector을 가지고 있습니다. 어떤 술어가 true을 반환하는 모든 요소를 ​​필터링하고 복사하려는 경우 std::vector에 새로 추가합니다.std :: vector를 특정 필터가있는 다른 벡터에서 만드는 방법은 무엇입니까?

나는 findsearch 함수를 보았지만 iterators 만 반환합니다.

저는 ObjC++을 사용하고 있습니다. 따라서 도움이된다면 블록 기능과 펑터를 사용할 수 있습니다. C++ 11 함수를 사용할 수 없습니다.

답변

15

C++ 11 사용자라면 Eugen의 답변에서 제안한대로 std::copy_if을 사용하십시오. 그렇지 않으면 std::remove_copy_if을 사용하여 술어의 논리를 적절히 수정할 수 있습니다.

+0

@Protheus "remove_copy_if"는 직관적이지 않으므로 놓치기 쉽습니다. 다행히도 C++ 11은 마침내 우리에게'copy_if'를줍니다. – juanchopanza

11

std :: copy_if 메서드를 사용할 수 있습니다. here을 참조하십시오.

+1

아, 결국 C++ 11에 있습니다! 나는 http://lists.boost.org/Archives/boost/2001/01/8022.php에서 수동으로 구현을 제안하려고했다. –

관련 문제