C++:bindata 类实现文件二进制整数读取、排序与归并合并输出
```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. 没有进行错误处理和异常处理,实际使用中还需要添加相关的错误处理和异常处理逻辑。 ######[AI写代码神器 | 1814点数解答 | 2024-06-01 16:28:14]
- C++:bindata 类实现文件二进制整数读取、排序与归并合并输出(GPT | 1814点数解答 | 2024-06-01 16:28:14)312
- C++:bindata 类实现文件二进制读取、排序与归并合并输出(GPT | 811点数解答 | 2024-06-01 16:29:51)293
- 批处理文件:依据参数表.xlsx精准修改文件.txt中p、t、s值(GPT | 811点数解答 | 2024-12-05 12:58:37)377
- 用批处理和Python实现“参数表.xlsx”与“文件.txt”数据匹配及修改(讯飞星火 | 531点数解答 | 2024-12-05 13:20:42)365
- 批处理文件:依据参数表.xlsx精准修改文件.txt特定参数值(阿里通义 | 495点数解答 | 2024-12-05 13:22:26)347
- 不使用冒泡排序,用归并排序降序合并 bina 与 binb 并输出结果!(GPT | 48点数解答 | 2024-06-01 16:26:38)318
- 判断超级幸运数:满足“纯4/7数位”或“4/7总个数为4或7”的整数计数(阿里通义 | 965点数解答 | 2026-03-13 12:15:06)20
- C++编程:冒泡排序函数模板、txtdata类与bindata类的实现及应用(GPT | 1551点数解答 | 2024-06-01 16:02:33)325
- C++:冒泡排序函数模板与文件读写类(txtdata、bindata)的实现及应用(GPT | 1941点数解答 | 2024-06-01 16:23:06)310
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- 代码填空挑战:完成正态分布、随机数生成及数据处理代码(阿里通义 | 506点数解答 | 2025-03-23 14:32:14)316
- 挑战!完成代码填空解锁数据处理奥秘(字节豆包 | 116点数解答 | 2025-03-26 22:22:15)335