Qual seria uma boa implementação do iota_n (falta de algoritmo do STL)
Com o C ++ 11, o STL tem agorastd::iota
função (verreferência). Em contraste comstd::fill_n
, std::generate_n
, não hástd::iota_n
, Contudo. Qual seria uma boa implementação para isso? Um loop direto (alternativa 1) ou delegação parastd::generate_n
com uma expressão lambda simples (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++; });
}
As duas alternativas gerariam código equivalente com otimizadores de compiladores?
ATUALIZAR: incorporou o excelente ponto de @Marc Mutz para também devolver o iterador em seu ponto de destino. Este também é comostd::generate_n
foi atualizado em C ++ 11 em comparação com C + + 98.