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

C++中如何实现两个vector的加权求和?

C++ 两个vector加权求和的std::transform实现方案

核心实现逻辑是使用支持双输入序列的std::transform重载,通过自定义二元运算(lambda或独立函数)实现加权求和逻辑,具体实现如下:

完整代码示例

#include <vector>
#include <algorithm>
// 如需四舍五入转int类型可引入下面的头文件
// #include <cmath>

int main() {
    // 输入示例vector
    std::vector<int> a = {2, 0, 1, 5, 0};
    std::vector<int> b = {0, 0, 1, 3, 5};
    // 存储结果的vector,按加权求和后是浮点数选择double类型
    std::vector<double> result;
    // 提前分配空间,避免插入时多次扩容
    result.reserve(a.size());

    std::transform(
        a.begin(), a.end(), // 第一个输入序列的起止迭代器
        b.begin(), // 第二个输入序列的起始迭代器
        std::back_inserter(result), // 输出迭代器,将结果尾插到result
        // 自定义逐元素加权运算逻辑
        [](int val_a, int val_b) {
            return val_a * 0.25 + val_b * 0.75;
            // 若需要输出int类型,可改成下面的写法做四舍五入
            // return static_cast<int>(std::round(val_a * 0.25 + val_b * 0.75));
        }
    );

    return 0;
}

说明

  • 上述实现中lambda是最常用的自定义运算逻辑方式,无需额外声明独立函数,调整权重或运算规则非常方便。如果不想使用lambda,也可以单独定义加权求和函数,将函数名作为std::transform的最后一个参数传入即可。
  • 使用前必须保证vector b的长度不小于vector a的长度,否则会出现越界访问的未定义行为。
  • 如果你的场景允许直接覆盖原有vector的内容,也可以将输出迭代器换成a.begin(),直接把结果覆盖写入vector a中。

内容的提问来源于stack exchange,提问作者Harsh Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:54:07