C++类实现数组的插入排序及深拷贝
C++类实现数组的插入排序及深拷贝
本文提供一个C++类示例,该类封装了指向数组的指针和数组长度,并实现了插入排序算法。代码中包含了构造函数、拷贝构造函数、插入排序方法、打印数组方法以及析构函数,同时详细解释了如何进行数组的深拷贝以避免内存泄漏。cpp#include
class ArraySorter {private: int* a; int n;
public: // 构造函数 ArraySorter(int* arr, int size) : n(size) { a = new int[n]; for (int i = 0; i < n; i++) { a[i] = arr[i]; } }
// 拷贝构造函数 ArraySorter(const ArraySorter& other) : n(other.n) { a = new int[n]; for (int i = 0; i < n; i++) { a[i] = other.a[i]; } }
// 插入排序方法 void insertSort() { for (int i = 1; i < n; i++) { int key = a[i]; int j = i - 1; while (j >= 0 && a[j] > key) { a[j + 1] = a[j]; j--; } a[j + 1] = key; } }
// 打印数组 void printArray() { for (int i = 0; i < n; i++) { std::cout << a[i] << ' '; } std::cout << std::endl; }
// 析构函数 ~ArraySorter() { delete[] a; }};
int main() { int arr[] = {5, 2, 9, 1, 7}; int size = sizeof(arr) / sizeof(arr[0]);
ArraySorter sorter(arr, size); sorter.insertSort();
sorter.printArray();
return 0;}
代码解释:
-
ArraySorter类: * 私有成员:a(指向动态分配的数组的指针) 和n(数组长度)。 * 构造函数: 初始化n并分配内存给a,然后将传入数组的值复制到a。 * 拷贝构造函数: 初始化n并分配新的内存给a,然后将另一个ArraySorter对象的数组元素复制到a。这是深拷贝的关键,确保每个对象都有自己的内存空间,避免了浅拷贝带来的问题。 *insertSort方法: 对数组a进行插入排序。 *printArray方法: 打印数组a的元素。 * 析构函数: 释放a指向的动态分配内存,避免内存泄漏。 -
main函数: * 创建一个整数数组arr。 * 创建ArraySorter对象sorter,并传入arr及其大小。 * 调用insertSort方法对数组进行排序。 * 调用printArray方法打印排序后的数组。
总结:
这个例子展示了如何使用C++类封装数组并实现排序算法。通过深拷贝,可以确保对象之间的数据独立性,避免潜在的内存问题。
原文地址: https://www.cveoy.top/t/topic/ozQ 著作权归作者所有。请勿转载和采集!