boost :: filter_iterator -- 我该如何使用STL实现?

11

我收到一个迭代器并需要将其传递给另一个函数,但会过滤掉一些元素(它是指针范围,并且我想过滤掉空指针)。

我搜索了“stl filter iterator”以查看如何实现此功能,发现了 boost::filter_iterator

这看起来很好,我可以使用它,但我能否也用旧的STL来实现呢?当然,不复制元素到新容器中。

我想我必须创建另一个迭代器类,提供必要的begin()end()等函数并进行过滤。因此,我需要重新实现boostiterator_filter ……?

2个回答

8

你是正确的;实际上,你需要自己重新创建过滤迭代器。我的建议是使用Boost的filter_iterator。Boost作为C++中最常用的外部库具有特殊地位;许多C++委员会成员已经为Boost编写了库。它的普及使它几乎成为了STL,因此在这里没有必要重新发明轮子。


3
我稍微不同意:安装Boost可能会很繁琐,有时你不想增加额外的依赖。我认为人们不愿重写filter_iterator真正原因是它实际上非常难以编写(而且非常繁琐),以确保正确性。 - Alexandre C.

4

我同意 rlbond 的观点。不要重复造轮子,使用 Boost::filter_iterator。如果您不想在项目中使用所有的 Boost 库,可以考虑使用 boost.bcp 提取您需要的库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接