C++数组指定索引删除元素问题:删除后末尾出现重复值求助
问题分析与解决方案
1. 索引合法性判断错误
你的代码中索引越界判断条件有误:
if (index <0 || index>this->numberOfElements)
数组的有效索引范围是 0 到 numberOfElements-1,当 index 等于 numberOfElements 时已经属于越界,但原条件仅在 index 大于 numberOfElements 时返回 false,这会导致合法索引范围判断错误。
2. 输出逻辑未匹配更新后的元素数量
你看到末尾重复的3,核心原因是:删除元素后,虽然numberOfElements已减1,但输出时可能遍历了底层数组的全部容量(而非仅前numberOfElements个有效元素)。
- 初始状态:底层数组为
[11,8,5,3],numberOfElements=4 - 删除索引2的元素后,函数将
arr[2]赋值为arr[3],此时底层数组变为[11,8,3,3],numberOfElements减为3 - 有效元素是前3个:
11,8,3,但如果输出时遍历了4个元素,未被覆盖的第4个元素3就会被打印出来,造成重复。
修正后的代码
bool Delete_At_Index(int index) { // 修正索引判断条件,确保索引在有效范围内 if (index < 0 || index >= this->numberOfElements) return false; // 将index之后的元素依次向前移动一位 for (int i = index + 1; i < this->numberOfElements; i++) { this->arr[i - 1] = this->arr[i]; } this->numberOfElements--; return true; }
配套输出逻辑修正
确保输出时只遍历有效元素:
void PrintArray() { for (int i = 0; i < this->numberOfElements; i++) { cout << this->arr[i] << " "; } cout << endl; }
内容的提问来源于stack exchange,提问作者PC Safe
相关产品推荐
相关产品推荐

