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

C++中仅用数组删除指定元素的问题求助

解决数组中删除指定元素的问题

嘿,我来帮你搞定这个问题!你现在的代码确实只是统计了需要保留的元素数量,但还没实际完成元素的“删除”——其实对于普通数组来说,我们没法真正删除元素,只能把要保留的元素挪到数组的前半部分,然后记录新的长度就行。

核心思路:原地修改数组(无额外数组)

我们可以用一个索引变量来跟踪新数组的写入位置:遍历原数组时,只要当前元素不是要删除的值,就把它复制到当前的写入位置,然后把写入位置往后移一位。遍历结束后,这个写入位置的数值就是新数组的长度,数组的前N个元素就是我们要的结果。

修改后的完整代码

#include <iostream>
using namespace std;

void test() {
    int data[] = { 2, 1, 3, 2, 5, 2, 7, 8, 4, 9 };
    int length = 10;
    int x = 2;
    // 跟踪新数组的写入位置,初始为0
    int newIndex = 0;

    for (int i = 0; i < length; i++) {
        if (data[i] != x) {
            // 将需要保留的元素复制到新位置
            data[newIndex] = data[i];
            // 写入位置后移
            newIndex++;
        }
    }

    // 输出结果长度
    cout << "Size: " << newIndex << endl;
    // 打印验证结果数组
    cout << "Result array: ";
    for (int i = 0; i < newIndex; i++) {
        cout << data[i] << " ";
    }
    cout << endl;
}

int main() {
    test();
    return 0;
}

代码解释

  • newIndex:一开始指向数组的第一个位置(索引0),每找到一个需要保留的元素,就把它放到data[newIndex],然后newIndex加1,相当于给下一个要保留的元素“占位置”。
  • 遍历结束后,newIndex的值就是新数组的有效长度,数组前newIndex个元素就是删除指定值后的结果。
  • 原数组中newIndex之后的元素可以不用管,因为我们只关心前newIndex个有效元素。

如果你想保留原数组(使用临时数组)

如果不想修改原数组,你可以创建一个和原数组大小相同的临时数组,把需要保留的元素复制进去:

#include <iostream>
using namespace std;

void test() {
    int data[] = { 2, 1, 3, 2, 5, 2, 7, 8, 4, 9 };
    int length = 10;
    int x = 2;
    int temp[10]; // 临时数组,和原数组大小一致
    int newIndex = 0;

    for (int i = 0; i < length; i++) {
        if (data[i] != x) {
            temp[newIndex] = data[i];
            newIndex++;
        }
    }

    cout << "Size: " << newIndex << endl;
    cout << "Result array: ";
    for (int i = 0; i < newIndex; i++) {
        cout << temp[i] << " ";
    }
    cout << endl;
}

int main() {
    test();
    return 0;
}

这样处理后,原数组data不会被修改,结果存在temp数组里,同样符合你“仅使用数组”的要求。

用这个方法测试你提到的例子:输入数组{1,2,3,1,2,3,1},删除值为3的元素,最终会得到前5个元素是{1,2,1,2,1},长度为5,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:42:10