Jaka byłaby dobra implementacja iota_n (brakujący algorytm z STL)

W C ++ 11 STL ma terazstd::iota funkcja (patrz aodniesienie). W odróżnieniustd::fill_n, std::generate_n, nie mastd::iota_n, jednak. Jaka byłaby do tego dobra implementacja? Pętla bezpośrednia (alternatywa 1) lub delegacja dostd::generate_n z prostym wyrażeniem lambda (alternatywa 2)?

Alternatywa 1)

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

Alternatywa 2)

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

Czy obie alternatywy wygenerują równoważny kod z kompilatorami optymalizującymi?

AKTUALIZACJA: włączył doskonały punkt @Marc Mutz, aby również zwrócić iterator w punkcie docelowym. Tak też jeststd::generate_n został zaktualizowany w C ++ 11 w porównaniu z C ++ 98.

questionAnswers(2)

yourAnswerToTheQuestion