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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:31:03