2012-06-14 10 views
15

Ho un std::vector pieno di oggetti. Voglio filtrare e copiare tutti gli elementi per i quali alcuni predicati restituiscono true in un nuovo std::vector.Come rendere std :: vector da un altro vettore con filtro specifico?

Ho visto le funzioni find e search ma restituiscono solo iteratori.

Sto usando ObjC++ in modo da poter utilizzare le funzioni di blocco e anche i funtori, se è utile. Non posso però usare le funzioni di C++ 11.

risposta

15

Se si dispone di C++ 11, utilizzare std::copy_if come suggerito nella risposta di Eugen. In caso contrario, è possibile utilizzare std::remove_copy_if con le modifiche appropriate alla logica del predicato.

+0

@Protheus "remove_copy_if" non è esattamente intuitivo, quindi è facile non vederlo. Fortunatamente C++ 11 ci dà finalmente 'copy_if'. – juanchopanza

11

è possibile utilizzare il metodo std :: copy_if. Vedi here.

+1

Ah, quindi è finalmente lì in C++ 11! Stavo per suggerire un'implementazione a mano alla http://lists.boost.org/Archives/boost/2001/01/8022.php. –

Problemi correlati