gpt4 book ai didi

c++ - 数组数据类型声明 C++

转载 作者:行者123 更新时间:2023-11-30 00:50:43 25 4
gpt4 key购买 nike

在练习用 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++];
}

如果我正在创建一个名为 mergesort 的类,我将如何在 C++ 中实现它,同时还能在程序运行后确定数组类型?

最佳答案

实现相同事物(基于序列的算法)的 STL 兼容方法是使您的 MergeSort 函数成为函数模板,将一对迭代器作为参数,而不是数组。

参见 declarationstd::sort 为例:

template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);

正如您在该声明中看不到的那样,序列元素的类型是明确的。

并可选地传递一个比较器(它本身会将两个不同类型的对象作为参数):

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );

编辑:

这样做的好处是,您的合并排序将适用于任何 STL 容器( vector 、列表、队列、字符串、数组等...),并且您将能够将其与任何其他 STL 算法组合.

关于c++ - 数组数据类型声明 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24048150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com