Boost:: filter_iterator - как бы я это сделал с STL?
Мне передан Iterator, и я должен передать его другой функции, но отфильтровать, чтобы некоторые элементы были пропущены (это диапазон указателей, и я хочу отфильтровать указатели NULL).
Я googled для "stl filter iterator", чтобы посмотреть, как это сделать, и boost:: filter_iterator.
Это выглядит красиво, и я могу использовать его, но могу ли я сделать это с добрым старым STL? Конечно, без копирования элементов в новый контейнер.
Я предполагаю, что мне придется создать еще один класс итератора, который предоставляет необходимые функции begin()
, end()
и т.д. и выполняет ли фильтрацию? Поэтому мне нужно было бы повторно реализовать boost
iterator_filter
...?
Ответы
Ответ 1
Вы правы; вы, по сути, сами воссоздаете итератор фильтра.
Мой совет - использовать Boost filter_iterator. Boost имеет особый статус как С++ наиболее используемая внешняя библиотека; многие члены комитета С++ помогли написать библиотеки для повышения. Его вездесущность по существу делает его почти равным; там действительно нет причин изобретать велосипед здесь.
Ответ 2
Я согласен с rlbond. Не изобретайте велосипед и используйте Boost:: filter_iterator. Если вы не хотите иметь все расширенные библиотеки в своем проекте, вам может потребоваться использовать boost.bcp, чтобы извлечь именно те, которые вы необходимо.