Функция шаблона iota была добавлена в стандартную библиотеку для заполнения итератора диапазон с возрастающей последовательностью значений.
template<typename ForwardIterator, typename Tp>
void
iota(ForwardIterator first, ForwardIterator last, Tp value)
{
for (; first != last; ++first)
{
*first = value;
++value;
}
}
Большинство других шаблонов в
имеют версии, которые принимают указанные пользователем операторы.
Имея это:
template<typename ForwardIterator, typename Tp, typename Operator>
void
iota(ForwardIterator first, ForwardIterator last, Tp value, Operator op)
{
for (; first != last; ++first)
{
*first = value;
op(value);
}
}
было бы удобно, если вы не хотите (или не можете) перегружать operator ++ () для Tp. Я считаю, что эту версию можно использовать более широко, чем версию оператора ++ () по умолчанию. <