从数组中提取偶数:代码实现遇到问题求助
解决数组提取偶数的问题
嘿,我看你这段提取数组中偶数的代码思路其实是在线的——先统计偶数的个数,再动态分配对应大小的数组来存储,不过你贴的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
相关产品推荐
相关产品推荐

