问题 boost :: filter_iterator - 我如何用STL做到这一点?


我传递了一个Iterator,我必须将它传递给另一个函数 - 但是过滤掉了以便跳过某些元素(它是一系列指针,我想过滤掉NULL指针)。

我用谷歌搜索“stl过滤器迭代器“看看如何做到这一点,并且 提高:: filter_iterator 来了

这看起来不错,我可以使用它,但我可以用旧的STL做到这一点吗?当然,不要将元素复制到新容器中。

我想我必须创建另一个提供必要的迭代器类 begin()end() 等功能并进行过滤?所以我必须重新实现 boost  iterator_filter...?


12588
2018-04-25 23:51


起源



答案:


你是对的;你本质上是自己重新创建过滤器迭代器。 我的建议是使用Boost的filter_iterator。 Boost具有c ++最常用的外部库的特殊地位;许多c ++委员会成员帮助编写了库以获得提升。它的无处不在基本上使它几乎成为现实;这里没有理由重新发明轮子。


8
2018-04-26 01:04



我有点不同意:安装加速可能很麻烦,有时候你不需要额外的依赖。我觉得 真实 一个人不会改写的原因 filter_iterator 实际上,正确编写它是非常困难的(并且非常麻烦)。 - Alexandre C.


答案:


你是对的;你本质上是自己重新创建过滤器迭代器。 我的建议是使用Boost的filter_iterator。 Boost具有c ++最常用的外部库的特殊地位;许多c ++委员会成员帮助编写了库以获得提升。它的无处不在基本上使它几乎成为现实;这里没有理由重新发明轮子。


8
2018-04-26 01:04



我有点不同意:安装加速可能很麻烦,有时候你不需要额外的依赖。我觉得 真实 一个人不会改写的原因 filter_iterator 实际上,正确编写它是非常困难的(并且非常麻烦)。 - Alexandre C.


我同意rlbond。不要重新发明轮子并使用Boost :: filter_iterator。如果您不想在项目中拥有所有boost库,则可能需要考虑使用 boost.bcp 准确地提取你需要的那些。


4
2018-04-26 08:29