如何创建两个模板版本以采用数组开头和结尾(带有T *和It)而没有重复的代码?

Dmi*_*sky 2 c++ visual-c++

当我创建一个将采用beginend的函数(假设创建一个quick_sort)时,我必须创建一个采用T *的版本:

template<typename T> void quick_sort(T *_beg, T *_end){...}
Run Code Online (Sandbox Code Playgroud)

template<typename It> void quick_sort(It _beg, It _end);
Run Code Online (Sandbox Code Playgroud)

因此,我可以在std::vector其他容器和内置数组中使用该函数。

但是为了避免重复的代码,第二个版本中唯一的事情是:

{
    quick_sort(&*_beg, &*_end);
}
Run Code Online (Sandbox Code Playgroud)

效果很好...大多数时候,但有时我会收到错误消息

can't dereference out of range vector iterator
Run Code Online (Sandbox Code Playgroud)

用于尝试取消引用end迭代器(使用Visual Studio编译器)。

如何安全地开发这两个版本以避免重复代码?

Sto*_*ica 5

指针是一个迭代器。因此,为避免重复,只需完全删除第一个版本,并坚持接受抽象(迭代器)。