C++新手求助:如何将vector a中的偶数按升序转移到vector b?
如何从vector中提取偶数并按升序排列(仅用基础算法)?
嘿,刚学C++碰到vector的问题太正常了!我完全用你已经掌握的循环遍历和冒泡排序来给你讲,保证每一步都好懂~
步骤1:从vector a中提取偶数到vector b
首先我们要逐个检查vector a里的每个元素,判断它是不是偶数(判断方法:num % 2 == 0,也就是除以2余数为0),如果是偶数就把它添加到vector b里。用最基础的循环就能实现,两种写法都给你列出来,选你看得顺眼的就行:
#include <iostream> #include <vector> using namespace std; int main() { // 你的示例输入 vector<int> a = {7, 4, 2, 9, 5}; vector<int> b; // 方法1:范围for循环(C++11及以上支持) for (int num : a) { if (num % 2 == 0) { b.push_back(num); // 把偶数添加到b的末尾 } } // 方法2:下标循环(更基础,适合刚学的同学) // for (int i = 0; i < a.size(); i++) { // int num = a[i]; // if (num % 2 == 0) { // b.push_back(num); // } // }
步骤2:用冒泡排序给vector b升序排列
既然你已经掌握冒泡排序,那直接把它用到vector b上就行。冒泡排序的核心逻辑就是多次遍历,相邻元素比较交换,每一轮都会把当前最大的元素“推”到最后,多轮之后整个vector就升序了:
// 冒泡排序开始 int b_size = b.size(); // 外层循环:控制排序的轮数,一共要排b_size-1轮 for (int i = 0; i < b_size - 1; i++) { // 内层循环:每一轮只需要比较到未排序的部分末尾 for (int j = 0; j < b_size - i - 1; j++) { // 如果前一个元素比后一个大,就交换它们 if (b[j] > b[j+1]) { int temp = b[j]; b[j] = b[j+1]; b[j+1] = temp; } } } // 输出最终的vector b cout << "处理后的vector b:"; for (int num : b) { cout << num << " "; } cout << endl; return 0; }
运行结果
把上面的代码编译运行,输入你的示例vector a = {7,4,2,9,5},就会输出:
处理后的vector b:2 4
小提示
- 如果vector a里没有偶数,vector b会是空的,这时候输出也会是空的,逻辑完全没问题;
- 冒泡排序的代码是通用的,不管b里有几个元素都能正常排序。
内容的提问来源于stack exchange,提问作者Dohn Joe
相关产品推荐
相关产品推荐

