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を使用して、必要なライブラリを正確に抽出することを検討してください。

関連する問題