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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:25:35