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.