Что было бы хорошей реализацией iota _n (отсутствующего алгоритма из STL)

В C++11 в STL появилась функция std::iota(, см. ссылку ).. Однако, в отличие от std::fill_n, std::generate_n, здесь нет std::iota_n. Что было бы хорошей реализацией для этого? Прямой цикл (вариант 1 )или делегирование std::generate_nс простым лямбда-выражением (вариант 2 )?

Вариант 1)

template
OutputIterator iota_n(OutputIterator first, Size n, T value)
{
        while (n--)
                *first++ = value++;
        return first;
}

Вариант 2)

template
OutputIterator iota_n(OutputIterator first, Size n, T value)
{
        return std::generate_n(first, n, [&](){ return value++; });
}    

Будут ли обе альтернативы генерировать эквивалентный код с помощью оптимизирующих компиляторов?

ОБНОВЛЕНИЕ:включил превосходную точку @Marc Mutz, чтобы также вернуть итератор в точку назначения. Вот какstd::generate_nбыл обновлен в С++ 11 по сравнению с С++ 98.

10
задан TemplateRex 10 March 2015 в 19:20
поделиться