我传递了一个迭代器,我必须将它传递给另一个函数 - 但是过滤掉了以便跳过某些元素(它是一系列指针,我想过滤掉NULL指针)。
我用Google搜索“ stl filter iterator ”来了解如何执行此操作,boost::filter_iterator出现了。
看起来不错,我可以使用它,但是我可以用好的旧STL做到吗?当然,不要将元素复制到新容器中。
我想我必须创建另一个迭代器类,它提供必要的begin()
,end()
等函数并进行过滤?所以我必须重新实现boost
iterator_filter
...?
答案 0 :(得分:8)
你是对的;你本质上是自己重新创建过滤器迭代器。 我的建议是使用Boost的filter_iterator。 Boost作为c ++最常用的外部库具有特殊的地位;许多c ++委员会成员帮助编写了库以获得提升。它的无处不在本质上使它几乎成为现实;这里真的没有理由重新发明轮子。
答案 1 :(得分:4)
我同意rlbond。不要重新发明轮子并使用Boost :: filter_iterator。如果您不想在项目中使用所有boost库,则可能需要考虑使用boost.bcp来精确提取所需的库。