```cpp #include <iostream> #include <fstream> class bindata { private: int data[201]; int size; public: bindata(const char* filename = "") : size(0) { if (filename != "") { std::ifstream file(filename, std::ios::binary); if (file) { int num; while (size < 201 && file.read((char*)&num, sizeof(int))) { data[size++] = num; } } } } ~bindata() {} bindata operator+(const bindata& other) const { bindata result; int i = 0, j = 0; while (i < size && j < other.size) { if (data[i] > other.data[j]) { result.data[result.size++] = data[i++]; } else { result.data[result.size++] = other.data[j++]; } } while (i < size) { result.data[result.size++] = data[i++]; } while (j < other.size) { result.data[result.size++] = other.data[j++]; } return result; } void sort() { // 使用归并排序对 data 进行降序排序 mergeSort(data, 0, size - 1); } void mergeSort(int arr[], int left, int right) { if (left < right) { int mid = left + (right - left) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); merge(arr, left, mid, right); } } void merge(int arr[], int left, int mid, int right) { int n1 = mid - left + 1; int n2 = right - mid; int L[n1], R[n2]; for (int i = 0; i < n1; i++) { L[i] = arr[left + i]; } for (int j = 0; j < n2; j++) { R[j] = arr[mid + 1 + j]; } int i = 0, j = 0, k = left; while (i < n1 && j < n2) { if (L[i] >= R[j]) { arr[k++] = L[i++]; } else { arr[k++] = R[j++]; } } while (i < n1) { arr[k++] = L[i++]; } while (j < n2) { arr[k++] = R[j++]; } } void print() const { for (int i = 0; i < size; 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.sort(); binab.print(); return 0; } ``` 注意: 1. 上述代码中的文件路径是使用的是 Windows 平台的路径格式,如果是其他平台,请相应地修改文件路径的格式。 2. 没有进行错误处理和异常处理,实际使用中还需要添加相关的错误处理和异常处理逻辑。 [2024-06-01 16:28:14 | AI写代码神器 | 1814点数解答]