在用c++编写归并排序代码作为练习时,我意识到我没有一种可靠的方法来声明一个在编译时没有特定类型的数组。
在Java中,有一种方法可以使数组具有可比性,以方便使用操作符(<)进行排序。=>)。我想知道的是:c++是否包含任何使数组具有可比性的方法?在我知道数组的类型之前有没有办法创建一个数组?
例如,我得到了一个简单合并排序程序的代码(Java)
public static void merge(Comparable[] a, int lo, int mid, int hi){
int i = lo, j = mid+1;
for(int k = lo; k <= hi; k++)
aux[k] = a[k];
for(int k = lo; k <= hi; k++)
if (i > mid) a[k] = aux[j++];
else if (j > high) a[k] = aux[i++];
else if (less(aux[j], aux[i])) a[k] = aux[j++];
else a[k] = aux[i++];
}
如果我正在创建一个名为归并排序的类,我如何在c++中实现它,同时还可以在程序运行后确定数组类型?
与STL兼容的实现相同事情(序列上的算法)的方法是使您的MergeSort函数成为函数模板,以一对迭代器作为参数,而不是数组。
以std::sort
的声明为例:
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);
你可以看到,在这个声明中没有任何地方是明确的序列元素的类型。
并可选地传递一个比较器(它本身将接受两个不同类型的对象作为参数):
template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
编辑:这样做的好处是,你的归并排序将适用于任何STL容器(向量,列表,队列,字符串,数组等),你将能够与任何其他STL算法组成它