You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ SortableArray类实例变量初始化与数组末尾元素添加问题

SortableArray类初始化与add方法实现问题解答

一、实例变量初始化的问题

你的代码里构造函数存在严重问题:构造函数内部重新定义了和成员变量同名的局部变量,导致类的成员变量完全没有被初始化,甚至会出现未定义行为(比如带参数的构造函数里用未初始化的max_size去分配数组)。

修正后的构造函数实现

推荐使用初始化列表来初始化成员变量,更高效且清晰:

#define DEFAULT_TEST_SIZE 1024

class SortableArray {
    // 用于存储数组的实例变量
    int *arr;
    // 用于存储数组当前元素数量的实例变量
    int count;
    // 用于存储数组容量的实例变量
    int max_size;

public:
    // 默认构造函数
    SortableArray() : arr(new int[DEFAULT_TEST_SIZE]), count(0), max_size(DEFAULT_TEST_SIZE) {}

    // 接收int类型size参数的构造函数
    explicit SortableArray(int size) : arr(new int[size]), count(0), max_size(size) {}

    // 记得添加析构函数,避免内存泄漏
    ~SortableArray() {
        delete[] arr;
    }

    // 拷贝构造和赋值运算符重载(可选,防止浅拷贝问题)
    SortableArray(const SortableArray& other) : count(other.count), max_size(other.max_size) {
        arr = new int[max_size];
        for (int i = 0; i < count; ++i) {
            arr[i] = other.arr[i];
        }
    }

    SortableArray& operator=(const SortableArray& other) {
        if (this != &other) {
            delete[] arr;
            max_size = other.max_size;
            count = other.count;
            arr = new int[max_size];
            for (int i = 0; i < count; ++i) {
                arr[i] = other.arr[i];
            }
        }
        return *this;
    }

如果不习惯初始化列表,也可以在构造函数体内直接给成员变量赋值,但要注意不要重新定义局部变量:

SortableArray() {
    arr = new int[DEFAULT_TEST_SIZE];
    count = 0;
    max_size = DEFAULT_TEST_SIZE;
}

explicit SortableArray(int size) {
    arr = new int[size];
    count = 0;
    max_size = size;
}

二、bool add(int element)方法的实现逻辑

判断数组剩余空间的核心是:当前元素数量count必须小于数组容量max_size(当count == max_size时,数组已经满了,没有剩余空间)。实现步骤如下:

  1. 检查count是否小于max_size,如果是,说明有剩余空间;
  2. 将元素添加到数组的count索引位置(因为当前元素是从0到count-1,末尾就是count);
  3. 元素添加完成后,count自增1;
  4. 返回true表示添加成功;如果数组已满,直接返回false。

完整的add方法代码

bool add(int element) {
    if (count < max_size) { // 正确的剩余空间判断条件
        arr[count] = element;
        count++;
        return true;
    }
    return false; // 数组已满,添加失败
}

内容的提问来源于stack exchange,提问作者CodingNoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:15:45