我该如何在C++中封装一个供一般客户使用的合并排序程序
How would I encapsulate a mergesort program for general customer use in C++?
我目前有一个mergesort,它接受一个int列表,并用它们组成一个数组,然后对它们进行排序,并打印出排序后的数组。目前,所有的代码都在一个.cpp文件中。
向想要对用户定义的对象数组进行排序的人提供代码的好方法是什么?
我的直觉是提供一个仅限虚拟方法的文件(接口),并要求我的用户覆盖比较运算符和读/写方法。
离开数组并使用链表会是最好的选择吗?
如果这太模糊/主观了,那就扇我耳光,把它关掉。我只是想要一些超出我自己的想法。
使用模板来实现排序,并使用指针数组而不是对象数组。请求实现比较的函子,还提供使用<
运算符进行比较的默认函子。
这是如何使用标准库来实现的。
如果客户有自己的类型,他们需要定义用于排序的operator<
和用于打印到ostream
:的operator<<
class Type {
//...
};
bool operator<(const Type& lhs, const Type& rhs) {
//...
}
ostream& operator<<(ostream& os, const Type& object) {
//...
}
vector<Type> originals;
vector<Type> values = originals;
stable_sort(values.begin(), values.end());
copy(values.begin(), values.end(),
ostream_iterator<Type>(cout, "n"));
你的客户必须有充分的理由不这样做。
最简单的解决方案,不需要为函子挖掘太多:
template <class T, int size>
class MergeSort
{
T* arr[size];
MergeSort(T* array[size])
{
// ...
}
void Sort()
{
// The rest is simple...
}
};
相关文章:
- 使用调试/崩溃报告将应用程序部署到客户端
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- C++库和自注册类:客户端应用程序中的工厂映射为空
- OpenGL GLFW 应用程序 - 客户端内存限制
- CMake导出的库-在客户端应用程序中找不到include/Lib路径
- 我的web应用程序的用户需要在浏览器上手动启用本机客户端吗
- 客户端发送消息,但服务器在客户端结束程序之前不接收消息
- C++启动另一个程序(客户端-服务器)的程序
- 我正在编写一个简单的客户端套接字应用程序,但在连接后服务器收到一个空缓冲区
- C++客户端/服务器聊天应用程序 - 从 Ubuntu 命令窗口扫描输入
- C++服务器/客户端聊天程序
- UDP客户端/服务器程序在不同的IP和端口上通信超过2个插座
- DLL – 在 DLL 初始化时填充的静态向量,向客户端程序返回零大小
- 防止客户端套接字程序崩溃CPP Google Protobuf
- TCP 客户端服务器程序
- 如何避免在C 11服务器程序中为多个客户端使用多个线程
- 必须在客户端计算机上安装的内容才能运行QT快速应用程序
- 客户端服务器回声程序进入UDP的僵局
- GDB执行时,Apache IGNITE C 客户端应用程序具有许多细分故障
- Qt客户程序