Was wäre eine gute Implementierung von iota_n (fehlender Algorithmus aus der AWL)

Mit C ++ 11 hat die AWL jetzt einestd::iota Funktion (siehe aReferenz). Im Kontrast zustd::fill_n, std::generate_n, es gibt keinstd::iota_n, jedoch. Was wäre eine gute Implementierung dafür? Eine direkte Schleife (Alternative 1) oder eine Delegierung anstd::generate_n mit einem einfachen Lambda-Ausdruck (Alternative 2)?

Alternative 1)

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

Alternative 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++; });
}    

Würden beide Alternativen mit der Optimierung von Compilern gleichwertigen Code generieren?

AKTUALISIEREN: Integrierte den ausgezeichneten Punkt von @Marc Mutz, um den Iterator auch an seinem Zielpunkt zurückzugeben. Das ist auch wiestd::generate_n wurde in C ++ 11 im Vergleich zu C ++ 98 aktualisiert.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage