2009-04-25 21 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来提取你需要的库。