В C++11 в STL появилась функция std::iota
(, см. ссылку ).. Однако, в отличие от std::fill_n
, std::generate_n
, здесь нет std::iota_n
. Что было бы хорошей реализацией для этого? Прямой цикл (вариант 1 )или делегирование std::generate_n
с простым лямбда-выражением (вариант 2 )?
Вариант 1)
template
OutputIterator iota_n(OutputIterator first, Size n, T value)
{
while (n--)
*first++ = value++;
return first;
}
Вариант 2)
template
OutputIterator iota_n(OutputIterator first, Size n, T value)
{
return std::generate_n(first, n, [&](){ return value++; });
}
Будут ли обе альтернативы генерировать эквивалентный код с помощью оптимизирующих компиляторов?
ОБНОВЛЕНИЕ:включил превосходную точку @Marc Mutz, чтобы также вернуть итератор в точку назначения. Вот какstd::generate_n
был обновлен в С++ 11 по сравнению с С++ 98.