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时,数组已经满了,没有剩余空间)。实现步骤如下:
- 检查
count是否小于max_size,如果是,说明有剩余空间; - 将元素添加到数组的
count索引位置(因为当前元素是从0到count-1,末尾就是count); - 元素添加完成后,
count自增1; - 返回
true表示添加成功;如果数组已满,直接返回false。
完整的add方法代码
bool add(int element) { if (count < max_size) { // 正确的剩余空间判断条件 arr[count] = element; count++; return true; } return false; // 数组已满,添加失败 }
内容的提问来源于stack exchange,提问作者CodingNoob
相关产品推荐
相关产品推荐

