Что было бы хорошей реализацией iota_n (отсутствует алгоритм из STL)
С C ++ 11 STL теперь имеетstd::iota
функция (см.ссылка). В отличие отstd::fill_n
, std::generate_n
, здесь нетstd::iota_n
, тем не мение. Что будет хорошей реализацией для этого? Прямой цикл (вариант 1) или делегированиеstd::generate_n
с простым лямбда-выражением (вариант 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++; });
}
Будут ли обе альтернативы генерировать эквивалентный код с оптимизирующими компиляторами?
UPDATE: включил превосходную точку @Marc Mutz, чтобы также вернуть итератор в его пункт назначения. Это также какstd::generate_n
обновлен в C ++ 11 по сравнению с C ++ 98.