boost :: filter_iterator - как бы я это сделал с STL? - PullRequest
11 голосов
/ 26 апреля 2009

Мне передали Iterator, и я должен передать его другой функции - но отфильтровать так, чтобы определенные элементы были пропущены (это диапазон указателей, и я хочу отфильтровать указатели NULL).

Я гуглил " stl filter iterator ", чтобы увидеть, как это сделать, и boost :: filter_iterator подошел.

Это выглядит неплохо, и я мог бы использовать его, но могу ли я сделать это со старым добрым STL? Конечно, не копируя элементы в новый контейнер.

Полагаю, мне нужно было бы создать еще один класс итераторов, обеспечивающий необходимые функции begin(), end() и т. Д. И выполняет ли фильтрация? Так что мне бы точно пришлось переопределить boost iterator_filter ...?

Ответы [ 2 ]

8 голосов
/ 26 апреля 2009

Вы правы; по сути, вы сами воссоздадите итератор фильтра. Мой совет будет использовать Boost's filter_iterator. Boost имеет особый статус наиболее используемой внешней библиотеки c ++; многие члены комитета по c ++ помогли написать библиотеки для повышения. Его повсеместное распространение делает его практически неизменным; здесь действительно нет причин изобретать велосипед.

4 голосов
/ 26 апреля 2009

Я согласен с rlbond. Не изобретайте колесо и используйте Boost :: filter_iterator. Если вы не хотите, чтобы в вашем проекте были все библиотеки boost, вы можете использовать boost.bcp , чтобы извлечь именно те, которые вам нужны.

...