¿Cuál sería una buena implementación de iota_n (falta el algoritmo de la STL)?
Con C ++ 11, el STL tiene ahora unstd::iota
función (ver unreferencia). En contraste constd::fill_n
, std::generate_n
, no haystd::iota_n
, sin embargo. ¿Cuál sería una buena implementación para eso? Un bucle directo (alternativa 1) o delegación astd::generate_n
con una expresión lambda simple (alternativa 2)?
Alternativa 1)
template<class OutputIterator, class Size, class T>
OutputIterator iota_n(OutputIterator first, Size n, T value)
{
while (n--)
*first++ = value++;
return first;
}
Alternativa 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++; });
}
¿Generarían ambas alternativas código equivalente con compiladores optimizados?
ACTUALIZAR: incorporó el excelente punto de @Marc Mutz para devolver también el iterador a su punto de destino. Así es comostd::generate_n
Se actualizó en C ++ 11 en comparación con C ++ 98.