Когда мне нравится знать, как можно реализовать алгоритм в стандартной библиотеке С++, я всегда смотрю http://en.cppreference.com/w/cpp/algorithm, что является отличный источник. Но иногда я не понимаю детали реализации, и мне нужно объяснение, почему что-то сделано именно так. Например, при реализации std::copy_n
, почему первое назначение выполняется вне цикла, и поэтому цикл начинается с 1
?
template< class InputIt, class Size, class OutputIt>
OutputIt copy_n(InputIt first, Size count, OutputIt result)
{
if (count > 0) {
*result++ = *first;
for (Size i = 1; i < count; ++i) {
*result++ = *++first;
}
}
return result;
}
Дополнительно: знаете ли вы сайт, на котором объясняются возможные варианты реализации алгоритма?