在C ++中编写mergesort的代码作为练习时,我意识到我并没有一种可靠的方法来声明在编译时没有特定类型的数组。
在Java中,有一种方法可以使数组具有Comparable以便于使用运算符进行排序(<。>,=)。我想知道的是:C ++是否包含任何使数组具有可比性的方法?在我知道它是什么类型的数组之前,有什么办法可以创建一个数组吗?
例如,我获得了一个简单的mergesort程序的代码(In 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++];
}
如果我正在创建一个名为mergesort的类,我将如何在C ++中实现它,同时还可以在程序运行后确定数组类型?
答案 0 :(得分:6)
实现相同事物(序列上的算法)的STL兼容方法是使MergeSort函数成为函数模板,将一对迭代器作为参数,而不是数组。 / p>
请参阅std::sort
的{{3}}作为示例:
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);
正如你所看到的,这个声明中没有任何地方显式的序列元素的类型。
并且可选地传递一个比较器(它本身将两个不同类型的对象作为参数):
template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
编辑:
这样做的好处是,您的合并排序将适用于任何STL容器(矢量,列表,队列,字符串,数组等...),您将能够使用任何其他STL算法进行组合