C++实现矩阵乘法

news2024/12/25 13:40:11

本贴分享用C++实现矩阵乘法计算的功能,具体内容请看代码和注释,这里单独说一明一部分代码块。

1.采用vector< vector<int>>的方式,可以实现无限度的二维动态数组,需要注意的是,对于C++来说a[m][n]的写法是合法的,而对于C语言则不行,必须采用malloc开辟空间等操作

2.对于vector< vector<int>>来说,其元素为vector<int> ,此处必须借助中间变量的方式,

vector<int> V1=V[i],然后 int i =V1[i],才能获取到数字元素

3.即便C++允许a[m][n],但是一定要记得初始化,不然可能会得到想象不到的结果

4.后期为了方便对列操作,新开辟了a[m][n]格式的数组,二维vector不利于对列操作

5.对于核心计算部分的三循环,第一层和第二层分别用来控制行标和列标,第三层才是真正的乘法计算,1号矩阵的行元素对应与2号矩阵的列元素相乘,再累加,得到的结果即为当前位置上矩阵的值

#include <iostream>
#include <vector>
using namespace std;
 
int main(int argc, char** argv) {
	
	int m1=0,m2=0,n1=0,n2=0;   //定义两个矩阵的行数和列数
	int num1=0,num2=0;         //两个矩阵的元素总数
	cout<<"请输入矩阵1的行数与列数:"<<endl; 
	cin>>m1>>n1;
	cout<<"请输入矩阵2的行数与列数:"<<endl;
	cin>>m2>>n2;
	
	if(m2!=n1)
	{
		cout<<"当前两个矩阵不能进行乘法运算!"<<endl;
		return 0;
	}		
	
	//创建两个矩阵并打印
	vector< vector<int>  >V1;
	vector< vector<int>  >V2;
	cout<<"请读入矩阵1:"<<endl; 
	for(int i=0;i<=m1-1;i++) //外层循环,控制行数向下移动 
	{
		vector<int> T1;
		for(int j=0;j<=n1-1;j++) //内层循环,控制列数向左移动 
		{
			int temp=0;
			cin>>temp;
			T1.push_back(temp);
		}
		V1.push_back(T1);
	} 
	cout<<"请读入矩阵2:"<<endl; 
	for(int i=0;i<=m2-1;i++) 
	{
		vector<int> T2;
		for(int j=0;j<=n2-1;j++)
		{
			int temp=0;
			cin>>temp;
			T2.push_back(temp);
		}
		V2.push_back(T2);
	}
	
	cout<<"输入的矩阵1如下:"<<endl; 
	for(int i=0;i<=m1-1;i++) //外层循环控制行数向下移动 
	{
		vector<int> C1=V1[i];
		for(int j=0;j<=n1-1;j++) //内层循环控制列数向左移动 
		{
			cout<<C1[j]<<" ";
		}
		cout<<endl;
	}
	
	cout<<"输入的矩阵2如下:"<<endl;
	for(int i=0;i<=m2-1;i++) //外层循环控制行数向下移动 
	{
		vector<int> C2=V2[i];
		for(int j=0;j<=n2-1;j++) //内层循环控制列数向左移动 
		{
			cout<<C2[j]<<" ";
		}
		cout<<endl;
	}
	
	int A1[m1][n1],A2[m2][n2];
	for(int i=0;i<=m1-1;i++) //外层循环,控制行数向下移动 
	{
		vector<int> C1=V1[i];
		for(int j=0;j<=n1-1;j++) //内层循环,控制列数向左移动 
		{
			A1[i][j]=C1[j];
		}
		cout<<endl;
	}
	for(int i=0;i<=m2-1;i++)  
	{
		vector<int> C2=V2[i];
		for(int j=0;j<=n2-1;j++)  
		{
			A2[i][j]=C2[j];
		}
		cout<<endl;
	}
	
	int A3[m1][n2];
	for(int i=0;i<=m1-1;i++)
	{
		for(int j=0;j<=n2-1;j++)
		{
			A3[i][j]=0;
		}
	}
	//计算第a行和第b列的元素乘积累和 
	for(int a=0;a<=m1-1;a++) //外层控制行标 
	{
		for(int b=0;b<=n2-1;b++) //里层控制列标 
		{
			int sum=0; 
			for(int i=0;i<=m2-1;i++)
			{
					int temp=0;
					temp=A1[a][i]*A2[i][b];
					//对应位置相乘 
					sum+=temp;	
					//再累加 
			} 
			A3[a][b]=sum;	
		}
	}

	for(int i=0;i<=m1-1;i++)
	{
		for(int j=0;j<=n2-1;j++)
		{
			cout<<A3[i][j]<<" ";
		}
		cout<<endl;
	}

	return 0;
}

对于矩阵:1 2 3;4 5 6和1 2;3 4 ;5 6相乘的结果如下图,与手算和MATLAB计算保持一致

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/820851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

备战秋招 | 笔试强训20

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、对于顺序存储的线性表&#xff0c;访问结点和增加结点的时间复杂度为&#xff08;&#xff09;。 A. O(n) O(n) B. O(n) O(1) C. O(1) O(n) D. O(1) O(1) 2、在下列链表中不能从当前结点出发访问…

NineData支持全版本的企业级Oracle客户端

Oracle 数据库是一款全球领先的关系型数据库管理系统&#xff0c;它为企业提供了高性能、高可用性和安全性的数据处理解决方案&#xff0c;被广泛应用于各个行业。对于 Oracle 数据库&#xff0c;大家都很熟悉&#xff0c;本文不再赘述。 近期&#xff0c;NineData 发布对 Ora…

云时代的运维正是不折不扣的架构师

1、引言 上学那会&#xff0c;每当作文中引用到张良这个典故&#xff0c;总喜欢用 “运筹帷幄之中&#xff0c;决胜千里之外” 来赞美张良雄才大略&#xff0c;指挥若定&#xff0c;现在还让我用的话&#xff0c;我会把这句话送给运维同学。 2013年左右&#xff0c;一朋友在某…

SOP/详解*和**/python数据结构(iter,list,tuple,dict)/ 解包

一、错误解决合集 1. > combined_seq.named_children() 2. isinstance 2th parameter : must be a type or tuple of types > 改为tuple&#xff0c;不要用列表。改为 LLLayer (nn.Conv2d,nn.Linear) 3. File “test.py”, line 90, in calculate_fin_fout print(“hi”…

Python生成自定义URL二维码并保存为图片文件

脚本简介描述&#xff1a; 我们的应用场景是网站提供了Android客户端的二维码&#xff0c;可以进行扫码直接下载。所以使用下方的脚本可以自动生成URL路径二维码&#xff0c;并保存到指定路径下展示在网站上。 代码展示 PS&#xff1a;主要用到了 qrcode第三方模块 [rootnod…

Flask-SocketIO

一、简介&#xff1a; Flask-SocketIO使Flask应用程序可以实现客户端和服务器之间的低延迟双向通信。客户端应用程序可以使用 Javascript、Python、C、Java和Swift中的任何SocketIO客户端库或任何其他兼容客户端来建立与服务器的永久连接。 二、安装&#xff1a; pip instal…

java高并发系列 - 第22天:JUC底层工具类Unsafe

java高并发系列 - 第22天:JUC底层工具类Unsafe 这是java高并发系列第22篇文章,文章基于jdk1.8环境。 本文主要内容 Unsafe基本介绍获取Unsafe实例Unsafe中的CAS操作Unsafe中原子操作相关方法介绍Unsafe中线程调度相关方法介绍park和unpark示例Unsafe锁示例Unsafe中对volati…

window安装mysql

1、下载mysql 官网下载地址&#xff1a;MySQL :: Download MySQL Community Server 国内阿里云镜像下载地址&#xff1a;mysql镜像_mysql下载地址_mysql安装教程-阿里巴巴开源镜像站 2、安装 我下载的是mysql-5.7.36-winx64.msi安装版本 选择安装类型&#xff1a; 选择安装位…

【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?

目录 前言 wrk 优点 缺点 jmeter 优点 缺点 locust 优点 缺点 总结 资料获取方法 前言 当你想做性能测试的时候&#xff0c;你会选择什么样的测试工具呢&#xff1f;是会选择wrk&#xff1f;jmeter&#xff1f;locust&#xff1f;还是loadrunner呢&#xff1f; 今…

台式机/工控机通过网线共享笔记本电脑无线网络(待续)

1、 将台式机通过网线和笔记本连接。 2、 将笔记本的“本地连接”和“无线网络连接”的ipv4均设置为自动获取。 4.修改台式机的IP地址为如下&#xff08;对应笔记本信息&#xff09; IP地址为192.168.XXX.12 子网掩码为255.255.255.0 默认网关为192.168.XXX.1 首选DNS为192.16…

蓝桥云课ROS机器人旧版实验报告-06工业机械臂-使用Moveit!

项目名称 实验六 使用MoveIt&#xff01; 成绩 内容&#xff1a;机械臂、体系结构、简单运动规划、抓取放置任务 实验记录&#xff08;70分&#xff09; 按实验一完成升级配置。 如果需要查阅moveit详细资料&#xff0c;参考如下官网截图&#xff1a; 本实验需要安装…

python面试题【题目+答案】

最近遇到了一份python的面试题&#xff0c;题目比较简单&#xff0c;时间控制在一个小时之内。以下是面试的题目跟答案&#xff0c;答案不代表最优解&#xff0c;只是当时所想到的一些思路&#xff0c;接下来将分享给大家。 1. 给出下面打印结果 答案&#xff1a; 12.0 6.0…

二叉树OJ(C)

文章目录 1.单值二叉树1.1法一&#xff1a;无返回值1.2法二&#xff1a;有返回值 2.相同的树3.对称二叉树4.二叉树的前序遍历5.二叉树的中序遍历6.二叉树的后序遍历7.另一棵树的子树8.二叉树遍历 1.单值二叉树 1.1法一&#xff1a;无返回值 struct TreeNode {int val;struct …

从国内最早的开放银行说起...

在银行技术部门工作的这几年&#xff0c;频繁听到「开放银行」这个概念。 "开放银行"一词是指通过应用编程接口&#xff08;API&#xff09;在各方之间共享财务数据的业务模式&#xff0c;包括金融服务提供商&#xff08;银行、保险公司、零售商等&#xff09;之间、…

Excel·VBA定量装箱、凑数值金额、组合求和问题

如图&#xff1a;对图中A-C列数据&#xff0c;根据C列数量按照一定的取值范围&#xff0c;组成一个分组装箱&#xff0c;要求如下&#xff1a; 1&#xff0c;每箱数量最好凑足50&#xff0c;否则为47-56之间&#xff1b; 2&#xff0c;图中每行数据不得拆分&#xff1b; 3&…

数据结构--动态顺序表

文章目录 线性表动态顺序表数组与顺序表 接口实现初始化&#xff1a;尾插&#xff1a;尾删头插头删指定位置插入指定位置删除查找摧毁 完整代码 线性表 线性表是数据结构中最基本、最简单也是最常用的一种数据结构。线性表是指由n个具有相同数据类型的元素组成的有限序列。 线…

Kubernetes (k8s)理论介绍

一&#xff1a;K8s 简介 1、K8s作用 2、K8s 来历 3、为什么要用 K8S? 4、Kubernetes 功能 二&#xff1a;Kubernetes 集群架构与组件 1、Kubernetes 集群架构与组件 2、核心组件 -Master 组件 &#xff08;1&#xff09;Kube-apiserver &#xff08;2&#xff09;Kube…

Wiki知识库项目-全流程笔记

第一章 第二章 2.1本章项目流程 2.2创建springboot项目 2.2.1修改springboot的版本号为 2.4.0 2.2.3将代码交给git进行管理 2-5修改日志样式 2.5.1将springboot项目打印日志样式进行修改。创建logback-spring.xml文件夹&#xff0c;文件与application.xml文件位置并列。 &l…

图书借阅系统 SSM框架

步骤一&#xff1a;创建数据库、表 步骤二&#xff1a;创建工程、包、pom依赖 步骤三&#xff1a;web.xml 步骤四&#xff1a;applicationContext.xml 步骤五&#xff1a;mybatis-config.xml 步骤六&#xff1a;实体类 步骤七&#xff1a;BookInfoMapper 步骤八&#xff1a; 步…

小白到运维工程师自学之路 第六十一集 (docker容器的操作)

1、创建容器与运行容器 docker create -it nginx /bin/bash -i 让容器的输入保持打开 -t 让Docker 分配一个伪终端 -d 守护进程形式运行 使用docker create 命令创建新容器后会返回一个唯一的ID 2、查看运行状态 docker ps -a 可以使用docker ps 命令来查看所有容器的运行状态…