Когда я создаю функцию, которая будет принимать begin
и end
массива (скажем, для создания quick_sort), я должен создать версию, которая принимает T *:
template<typename T> void quick_sort(T *_beg, T *_end){...}
и
template<typename It> void quick_sort(It _beg, It _end);
Так что я могу использовать функцию в std::vector
и других контейнерах, а также во встроенных массивах.
Но во избежание дублирования кода единственное, что находится ввторая версия:
{
quick_sort(&*_beg, &*_end);
}
Работает хорошо ... в большинстве случаев, но иногда я получаю ошибку
can't dereference out of range vector iterator
За попытку разыменования итератора end
(ИспользованиеVisual Studio Compiler).
Как безопасно разработать обе версии, избегая дублирования кода?