如何用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
相关产品推荐
相关产品推荐

