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

如何用C++将二维vector各子向量求和结果存入一维vector

对C++二维vector的子向量分别求和并存入一维vector的实现方法

针对你的需求,只需调整求和变量的作用域,并在每个子向量求和完成后将结果存入一维vector即可,以下是几种实现方式:

1. 传统嵌套循环写法

这是最直观的实现方式,适合理解基础逻辑:

#include <iostream>
#include <vector>

int main() 
{
    std::vector<std::vector<double>> a = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
    std::vector<double> b;

    // 遍历每个子vector
    for (int i = 0; i < a.size(); ++i) {
        double sub_sum = 0.0; // 每个子vector的求和变量,每次循环重置为0
        for (int j = 0; j < a[i].size(); ++j) {
            sub_sum += a[i][j];
        }
        b.push_back(sub_sum); // 将当前子vector的和存入一维vector b
    }

    // 输出结果
    std::cout << "b = { ";
    for (size_t k = 0; k < b.size(); ++k) {
        std::cout << b[k];
        if (k != b.size() - 1) {
            std::cout << ", ";
        }
    }
    std::cout << " }" << std::endl;

    return 0;
}

关键注意点

  • 将求和变量sub_sum放在外层循环内部,确保处理每个子vector前都重置为0,避免累计之前子vector的结果。
  • 把sub_sum的类型设为double,匹配二维vector中元素的类型,防止精度丢失。

2. C++11+ 范围for循环写法

用范围for循环可以让代码更简洁易读:

#include <iostream>
#include <vector>

int main() 
{
    std::vector<std::vector<double>> a = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
    std::vector<double> b;

    // 遍历每个子vector
    for (const auto& sub_vec : a) {
        double sub_sum = 0.0;
        // 遍历当前子vector的所有元素
        for (double num : sub_vec) {
            sub_sum += num;
        }
        b.push_back(sub_sum);
    }

    // 输出结果
    std::cout << "b = { ";
    for (size_t i = 0; i < b.size(); ++i) {
        std::cout << b[i];
        if (i != b.size() - 1) std::cout << ", ";
    }
    std::cout << " }" << std::endl;

    return 0;
}

3. 用STL算法std::accumulate简化代码

借助标准库的std::accumulate可以直接计算子vector的和,代码更简洁,需要包含<numeric>头文件:

#include <iostream>
#include <vector>
#include <numeric> // 必须包含此头文件以使用std::accumulate

int main() 
{
    std::vector<std::vector<double>> a = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
    std::vector<double> b;

    for (const auto& sub_vec : a) {
        // std::accumulate计算区间内元素的累加和,初始值0.0保证结果为double类型
        double sum = std::accumulate(sub_vec.begin(), sub_vec.end(), 0.0);
        b.push_back(sum);
    }

    // 输出结果
    std::cout << "b = { ";
    for (size_t i = 0; i < b.size(); ++i) {
        std::cout << b[i];
        if (i != b.size() - 1) std::cout << ", ";
    }
    std::cout << " }" << std::endl;

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:05:25