2009-04-25 20 views
11

我傳遞了一個Iterator,我必須將它傳遞給另一個函數 - 但是要過濾掉,以便某些元素被跳過(這是一個指針範圍,我想過濾掉NULL指針)。boost :: filter_iterator - 我將如何與STL做到這一點?

我搜索了「stl過濾器迭代器」以查看如何做到這一點,並且boost::filter_iterator出現了。

這看起來不錯,我可以使用它,但我可以做到這一點與舊的STL好嗎?當然,不要將這些元素複製到一個新的容器中。

我想我會創建另一個迭代器類,提供必要的begin(),end()等功能,並進行過濾?所以我完全必須重新實現boostiterator_filter ...?

回答

8

你是對的;你基本上會自己重新創建過濾器迭代器。 我的建議是使用Boost的filter_iterator。 Boost具有C++最常用的外部庫的特殊地位;許多C++委員會成員已經幫助編寫庫來提升。它的無處不在基本上使它幾乎是現成的;這裏真的沒有理由重新發明輪子。

+3

我有點不同意:升壓可能會很麻煩,有時你不希望有額外的依賴。我認爲不會重寫`filter_iterator`的* real *原因在於它實際上很難(並且非常麻煩)正確地寫入。 – 2011-08-07 20:12:43

4

我同意rlbond。不要重新發明輪子並使用Boost :: filter_iterator。如果你不想在你的項目中加入所有庫,你可以考慮使用boost.bcp來提取你需要的庫。