2009-04-25 17 views
11

Ho passato un Iterator e devo passarlo a un'altra funzione, ma filtrato in modo tale che alcuni elementi vengano saltati (è un intervallo di puntatori e voglio filtrare i puntatori NULL).boost :: filter_iterator - come lo farei con l'STL?

Ho cercato su google "stl filter iterator" per vedere come procedere e boost::filter_iterator è stato visualizzato.

Sembra bello e potrei usarlo, ma potrei farlo anche con il buon vecchio STL? Senza copiare gli elementi in un nuovo contenitore, ovviamente.

Immagino che dovrei creare un'altra classe di iteratore che fornisca le necessarie funzioni begin(), end() ecc. E il filtro? Quindi dovrei esattamente reimplementare lo boostiterator_filter ...?

risposta

8

Sei corretto; essenzialmente si ricrea il filtro iteratore da solo. Il mio consiglio sarebbe di usare il filtro_iterator di Boost. Boost ha uno stato speciale come libreria esterna più usata di C++; molti membri del comitato C++ hanno aiutato a scrivere le librerie per aumentare. La sua ubiquità lo rende essenzialmente quasi-stl com'è; non c'è davvero alcun motivo per reinventare la ruota qui.

+3

Non sono affatto d'accordo: boost può essere scomodo da installare e talvolta non si desidera una dipendenza extra. Penso che la * vera * ragione per cui non si dovrebbe riscrivere 'filter_iterator' è che è piuttosto difficile (e molto complicato) scrivere correttamente. –

4

Sono d'accordo con rlbond. Non reinventare la ruota e utilizzare Boost :: filter_iterator. Se non vuoi avere tutte le librerie di boost nel tuo progetto, potresti prendere in considerazione l'utilizzo di boost.bcp per estrarre esattamente quelle che ti servono.

Problemi correlati