酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

定义 bindata 类,构造时如提供了文件名,则在构造函数中打开文件并按二进制方式读取最多10个整数存入私有成员变量 int data[20]中。文件的格式是:整数按二进制方式保存在文件中,每个整数占用4字节。bindata 类不必保存文件名。析构时不保存数据。用bindata bina("c:lisy13la.bin")定义对象, 用bindata binb("c:ilsy131nb.bin")定义对象, 对 bina 和 binb 排序后,执行 bindata binab = bina + binb;合并 2个bindata对象,并且要求合并后的数据依然是降序的。合并时不能使用冒泡等排序,而是使用归并排序,即依次从两个 bindata 对象中取出较大的,放入合并后的bindata 对象中。屏幕输出 binab的内容

``` #include <iostream> #include <fstream> #include <algorithm> class bindata { private: int data[20]; public: bindata(const char* filename = "") { if (filename[0] != '\0') { std::ifstream file(filename, std::ios::binary); if (file.is_open()) { file.read((char*)data, sizeof(int) * 10); } } } bindata operator+(const bindata& other) const { bindata result; std::merge(data, data + 10, other.data, other.data + 10, result.data, std::greater<int>()); return result; } friend bool operator>(const bindata& lhs, const bindata& rhs) { return std::lexicographical_compare(lhs.data, lhs.data + 20, rhs.data, rhs.data + 20, std::greater<int>()); } void sort() { std::sort(data, data + 20, std::greater<int>()); } void print() { for (int i = 0; i < 20; i++) { std::cout << data[i] << " "; } std::cout << std::endl; } }; int main() { bindata bina("c:lisy13la.bin"); bindata binb("c:ilsy131nb.bin"); bina.sort(); binb.sort(); bindata binab = bina + binb; binab.print(); return 0; } ``` [2024-06-01 16:29:51 | AI写代码神器 | 811点数解答]

相关提问