使用vector分离数组奇偶元素时push_back未正常生效如何解决?
问题原因
- 核心问题是代码没有实现数组全量遍历逻辑,仅处理了下标为
0的第一个元素。你在if/else分支中调用sort(arr, i+1)仅执行了奇偶判断,没有对返回结果做存储处理,也没有迭代下标变量遍历所有数组元素,因此最终仅第一个元素(值为1,奇数)被存入odd容器,其余元素全部未处理。 - 辅助判断函数命名为
sort存在歧义,容易和STL标准库的排序函数std::sort混淆,建议更名。 - 动态申请的堆数组
arr使用后未执行delete[]释放,存在内存泄漏风险。
修正后的可运行代码
#include <iostream> #include <vector> using namespace std; // 更名避免和std::sort冲突,逻辑保持不变 bool isEven(int num){ return num % 2 == 0; } int main(){ int n; cin >> n; int *arr = new int[n]; for(int i=1 ; i<=n ; i++){ arr[i-1] = i; } vector <int> even , odd; // 新增循环遍历所有数组元素 for(int i=0; i<n; i++){ if(isEven(arr[i])){ even.push_back(arr[i]); }else{ odd.push_back(arr[i]); } } // 释放动态申请的内存 delete[] arr; cout << "the even numbers are : " << endl; for(auto element:even){ cout << element << " "; } cout << endl; cout << "the odd numbers are : " << endl; for(auto element:odd){ cout << element << " "; } return 0; }
内容的提问来源于stack exchange,提问作者Namrata Mundhra
相关产品推荐
相关产品推荐

