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;}

代码解释:

  1. ArraySorter: * 私有成员: a (指向动态分配的数组的指针) 和 n (数组长度)。 * 构造函数: 初始化 n 并分配内存给 a,然后将传入数组的值复制到 a。 * 拷贝构造函数: 初始化 n 并分配新的内存给 a,然后将另一个 ArraySorter 对象的数组元素复制到 a。这是深拷贝的关键,确保每个对象都有自己的内存空间,避免了浅拷贝带来的问题。 * insertSort 方法: 对数组 a 进行插入排序。 * printArray 方法: 打印数组 a 的元素。 * 析构函数: 释放 a 指向的动态分配内存,避免内存泄漏。

  2. main 函数: * 创建一个整数数组 arr。 * 创建 ArraySorter 对象 sorter,并传入 arr 及其大小。 * 调用 insertSort 方法对数组进行排序。 * 调用 printArray 方法打印排序后的数组。

总结:

这个例子展示了如何使用C++类封装数组并实现排序算法。通过深拷贝,可以确保对象之间的数据独立性,避免潜在的内存问题。

C++类实现数组的插入排序及深拷贝

原文地址: https://www.cveoy.top/t/topic/ozQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录