Когсуэлл Джефф
Шрифт:
Если требуется изменить первоначальную последовательность, просто передайте в качестве результирующего итератора начало этой последовательности.
Использование двух последовательностей и бинарной операции работает точно так же. и в качестве выходной последовательности можно использовать одну из входных.
Если требуется преобразовать элементы на месте, можно избежать накладных расходов на присвоение каждому элементу возвращаемого значения некоторой функции. Или, если функтор, который требуется использовать, изменяет свой объект-источник, то можно использовать
Если же все, что требуется сделать, — это изменить саму последовательность, не изменяя каждый из ее элементов, то в рецепте 7.6 описывается множество стандартных алгоритмов для реорганизации элементов в последовательностях.
Рецепты 7.1 и 7.6.
7.10. Написание собственного алгоритма
Для диапазона требуется выполнить алгоритм, и ни один из стандартных алгоритмов не удовлетворяет требованиям.
Напишите алгоритм в виде шаблона функции и с помощью имен параметров шаблона укажите свои требования к итератору. В примере 7.10 показан измененный стандартный алгоритм
Пример 7.10. Написание собственного алгоритма
Запуск примера 7.10 будет выглядеть примерно так.
Вы видите, что он копирует в результирующий диапазон только те значения, которые меньше, чем «cookie».
Стандартная библиотека содержит шаблон функции
Этот алгоритм прост, но в его реализации есть еще кое-что, что привлекает внимание. Посмотрев на объявление, вы увидите, что в нем присутствует три параметра шаблона.
Первый параметр шаблона