C++实验6-矩阵求和

部署运行你感兴趣的模型镜像
/* 
* 文件名称: 矩阵求和
* 作    者: 王泽彬 
* 完成日期:    2016  年    5 月  27  日 
* 版 本 号:v1.0 
* 对任务及求解方法的描述部分:无
* 输入描述:  无
* 问题描述: 无
* 程序输出:  无
* 问题分析: 无
* 算法设计:  无
*/  #include<iostream>
using namespace std;
int main()
{
    int a[3][3],i,j,m,n;
    cout<<"输入九个整数,用空格分开:"<<endl;
    for(i=0; i<=2; i++)
    {
        for(j=0; j<=2; j++)
            cin>>a[i][j];
    }
    for(i=0; i<=2; i++)
    {
        for(j=0; j<=2; j++)
            cout<<a[i][j];
        cout<<endl;
    }
    m=a[0][0]+a[1][1]+a[2][2];
    n=a[2][0]+a[1][1]+a[0][2];
    cout<<"对角线和m="<<m<<endl;
    cout<<"对角线和n="<<n<<endl;
    return 0;
}

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

C++ 中对矩阵求和,指的是将矩阵中所有元素相加得到一个标量值。根据你使用的库不同(如 OpenCV、Eigen 或原生实现),方法略有差异。 下面详细介绍几种常见的 **C++ 矩阵求和** 方法: --- ## ✅ 方法一:使用 OpenCV (`cv::Mat`) OpenCV 提供了内置函数 `cv::sum()` 来计算矩阵所有通道的元素和。 > ⚠️ 注意:如果矩阵是多通道的(如 BGR 图像),`sum()` 会返回每个通道的和。 ### 📌 示例代码:单通道矩阵求和 ```cpp #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { // 创建一个 3x3 的单通道矩阵 Mat A = (Mat_<double>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9); // 求所有元素之和 Scalar total = sum(A); // 返回 Scalar,对于单通道,只有 total[0] 有效 cout << "矩阵 A:" << endl << A << endl << endl; cout << "所有元素之和 = " << total[0] << endl; return 0; } ``` ### 输出: ``` 矩阵 A: [1, 2, 3; 4, 5, 6; 7, 8, 9] 所有元素之和 = 45 ``` > ✅ `sum(Mat)` 是最简洁高效的方式。 --- ## ✅ 方法二:手动遍历(使用 `cv::Mat` 或 `std::vector`) 如果你希望不依赖高级函数或学习原理,可以手动遍历。 ### 📌 使用 `cv::Mat` 遍历求和 ```cpp double total = 0; for (int i = 0; i < A.rows; ++i) { for (int j = 0; j < A.cols; ++j) { total += A.at<double>(i, j); } } cout << "手动求和结果 = " << total << endl; ``` ### 📌 使用 `vector<vector<double>>` 实现 ```cpp #include <iostream> #include <vector> using namespace std; double matrixSum(const vector<vector<double>>& mat) { double sum = 0; for (const auto& row : mat) { for (double val : row) { sum += val; } } return sum; } int main() { vector<vector<double>> A = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; cout << "矩阵元素总和 = " << matrixSum(A) << endl; // 输出 45 return 0; } ``` --- ## ✅ 方法三:使用 Eigen 库 Eigen 提供 `.sum()` 成员函数,非常方便。 ### 📌 示例代码: ```cpp #include <Eigen/Dense> #include <iostream> using namespace Eigen; using namespace std; int main() { MatrixXd A(3, 3); A << 1, 2, 3, 4, 5, 6, 7, 8, 9; double total = A.sum(); cout << "矩阵 A:" << endl << A << endl << endl; cout << "所有元素之和 = " << total << endl; return 0; } ``` > ✅ 编译命令(需安装 Eigen): ```bash g++ -I/usr/include/eigen3 main.cpp -o matrix_sum ``` --- ## ✅ 方法四:逐行或使用 STL 算法(C++11+) 你可以结合 `std::accumulate` 实现更现代的写法。 ### 📌 使用 `std::accumulate` ```cpp #include <vector> #include <numeric> #include <iostream> using namespace std; int main() { vector<vector<double>> A = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; double total = 0; for (const auto& row : A) { total += accumulate(row.begin(), row.end(), 0.0); } cout << "STL accumulate 求和 = " << total << endl; return 0; } ``` --- ## ✅ 对比总结 | 方法 | 是否推荐 | 优点 | 缺点 | |------|----------|------|------| | OpenCV `sum()` | ✅ 推荐 | 简洁、高效、自动处理类型 | 仅限 `cv::Mat` | | 手动双循环 | ✅ 学习用 | 易理解、无依赖 | 效率略低 | | Eigen `.sum()` | ✅✅ 强烈推荐 | 高性能、语法清晰 | 需引入 Eigen | | `std::accumulate` | ✅ C++风格 | 函数式编程风格 | 多层嵌套稍复杂 | --- ## ✅ 注意事项 - ❗ 如果矩阵为空(0×0),应先检查 `A.empty()`。 - 🔢 数据类型精度:建议使用 `double` 防止溢出。 - 🎨 多通道图像:`cv::sum()` 返回 `Scalar`,每个通道分别求和,取 `[0]` 即可。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值