Позвольте мне добавить свой комментарий к ответу, чтобы у меня было немного больше места.
Во-первых, ваша реализация выглядит хорошо.
Теперь, почему этого нет в стандарте?(Новый стандарт добавляет std::copy_n
, но это тоже делает что-то другое. *)
Подумайте об этом так: strncopy
на самом деле не «хорошая» идея;это просто не ужасная идея.Поскольку в C нет динамических структур данных, лучше всего сделать версию с проверкой длины.
Но в C ++ это не вписывается в общую идею динамических контейнеров: вам редко захочется перезаписать некоторые элементы, а вместо создать все элементы, которые вы делаете с помощью std::copy
плюс std::inserter
.strncpy
- это костыль, который требует от вас предварительно распределить структуру данных назначения, но в C ++ мы можем сделать намного лучше, чем эта.С помощью динамических контейнеров, итераторов и вставок мы можем копировать что угодно , не беспокоясь о распределении.
Другими словами, любой абстрактный алгоритм, который вы можете себе представить, должен иметь лучший, более конкретный методполучения итераторов и диапазонов итераторов (например, удалить / стереть);редко бывает, чтобы конечная цель алгоритма состояла в том, чтобы создать только выходной диапазон, ограниченный каким-либо другим целевым диапазоном.
В итоге: да, вы можете сделать это,но вы, вероятно, можете сделать лучше.
*) Хотя copy_n
плюс min
исходного и конечного размера можно использовать для создания ограниченной копии.