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, чтобы извлечь именно те, которые вы необходимо.