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

从数组中提取偶数:代码实现遇到问题求助

解决数组提取偶数的问题

嘿,我看你这段提取数组中偶数的代码思路其实是在线的——先统计偶数的个数,再动态分配对应大小的数组来存储,不过你贴的main函数代码没写完,而且还有几个容易踩坑的地方,我来帮你理顺并修正一下~

原代码的几个问题

  • main函数里的调用代码不完整,没法正确获取和使用返回的偶数数组
  • 动态分配的数组在使用完后没有释放,会造成内存泄漏
  • 调用者不知道返回数组的长度,没法正确遍历输出里面的元素
  • 如果原数组里没有偶数,返回的空数组也需要妥善处理

修正后的完整代码(手动管理内存版)

如果还是想用指针的方式实现,我们可以通过引用参数把偶数的个数传递给调用者,同时做好内存释放和边界处理:

#include <iostream>
using namespace std;

// 第三个参数通过引用返回提取出的偶数数量
int *paire(int *d, int length, int &evenCount) {
    evenCount = 0;
    // 第一步:统计偶数的个数
    for (int i = 0; i < length; i++) {
        if (d[i] % 2 == 0) {
            evenCount++;
        }
    }
    // 如果没有偶数,返回nullptr更安全
    if (evenCount == 0) {
        return nullptr;
    }
    // 动态分配存储偶数的数组
    int *k = new int[evenCount];
    int position = 0;
    // 第二步:把偶数存入新数组
    for (int i = 0; i < length; i++) {
        if (d[i] % 2 == 0) {
            k[position] = d[i];
            position++;
        }
    }
    return k;
}

int main() {
    int b[8] = {1,2,3,4,5,6,7,8};
    int evenNum;
    int *array1 = paire(b, 8, evenNum);
    
    // 输出提取结果
    if (array1 != nullptr) {
        cout << "提取出的偶数:";
        for (int i = 0; i < evenNum; i++) {
            cout << array1[i] << " ";
        }
        cout << endl;
        // 必须释放动态分配的内存,避免泄漏
        delete[] array1;
        array1 = nullptr; // 防止出现野指针
    } else {
        cout << "原数组中没有偶数哦" << endl;
    }
    
    return 0;
}

更简洁安全的STL容器版

在C++里,推荐优先使用vector这类STL容器,它会自动管理内存,不用手动new和delete,代码更简洁不容易出错:

#include <iostream>
#include <vector>
using namespace std;

vector<int> paire(int *d, int length) {
    vector<int> evens;
    for (int i = 0; i < length; i++) {
        if (d[i] % 2 == 0) {
            evens.push_back(d[i]);
        }
    }
    return evens;
}

int main() {
    int b[8] = {1,2,3,4,5,6,7,8};
    vector<int> array1 = paire(b, 8);
    
    cout << "提取出的偶数:";
    // 用范围for循环遍历vector,更方便
    for (int num : array1) {
        cout << num << " ";
    }
    cout << endl;
    
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:27:35