我正在完成一项任务。赋值的目标是使用4种不同的排序算法并对它们进行比较,以确定何时哪种算法优于另一种算法。我决定将每个排序方法创建为自己的类,并将要排序的向量传递给类。
由于每个类都包含在内并且具有相同的参数(因此没有重载),如何指定我希望调用的排序函数?我试过做
insertionsort.sort(insertvec); //错误:insertionsort未声明
插入排序::排序(insertvec); //错误:insertionsort未声明
排序(insertvec); //作品
insertionsort->排序(insertvec); //错误:insertionsort未声明
所有类都使用命名空间std,因为我没有看到更改命名空间会有什么帮助。是的,我对命名空间的工作知识很薄弱。
更新:
好的,条款选择不好。我没有上课。我认为类是cpp和h文件,这是不准确的。我没有把排序算法写成类,只是作为写在cpp中但由头文件访问的函数,它们被包含并被调用。
那么如何告诉编译器我想要merge.sort()而不是insert.sort()?
答案 0 :(得分:0)
由于您的类都使用相同的方法签名,因此您应该使用该方法的接口。然后,您可以轻松地使用具有接口类型的排序对象(即您的具体类)并调用该方法。这就是界面首先存在的原因。
答案 1 :(得分:-1)
在编辑之前确定。我想出了这个方法,让他们在不同的课堂上。从评论到你的问题,你可以看到非常浪费,而不是最佳实践。
#include <vector>
using namespace std;
class InsertionSort1
{
public:
void sort(vector<int> &theVector)
{
//sort implementation 1
}
};
class InsertionSort2
{
public:
void sort(vector<int> &theVector)
{
//sort implementation 2
}
};
class InsertionSort3
{
public:
void sort(vector<int> &theVector)
{
//sort implementation 3
}
};
class InsertionSort4
{
public:
void sort(vector<int> &theVector)
{
//sort implementation 4
}
};
int main()
{
vector<int> vector1 = {/*elements*/};
vector<int> vector2 = {/*elements*/};
vector<int> vector3 = {/*elements*/};
vector<int> vector4 = {/*elements*/};
InsertionSort1 algorithm1;
InsertionSort2 algorithm2;
InsertionSort3 algorithm3;
InsertionSort4 algorithm4;
algorithm1.sort(vector1);
algorithm2.sort(vector2);
algorithm3.sort(vector3);
algorithm4.sort(vector4);
//examine vectors to see differences
}
如果您可以将您的代码发布到您的问题中,或许我可以更新我的答案以更好地帮助您。