c++矩阵
这里讲的矩阵有创建矩阵,矩阵加法,矩阵乘法,输出矩阵这些功能。
#include<iostream>
using namespace std;
template<class T>
class matrix //矩阵节点
{
public:
matrix(int theRows = 0, int theColumns = 0);
matrix(const matrix<T>&);
~matrix() { delete[] element; };
int rows()const { return theRows; };
int cols()const { return theColumns; };
T& operator()(int i, int j)const;
matrix<T>& operator=(const matrix<T>&);
matrix<T> operator+()const;
matrix<T> operator+(const matrix<T>&)const;
matrix<T> operator-()const;
matrix<T> operator-(const matrix<T>&)const;
matrix<T> operator*(const matrix<T>&)const;
matrix<T>& operator+=(const T&);
void Input();
void Output();
private:
int theRows;
int theColumns;
T* element; //元素
};
template<class T>
matrix<T>::matrix(int theRows, int theColumns)
{
if (theColumns < 0 || theRows < 0)
{
cout<<"Rows and Cols must be >= 0 ";
}
if ((theColumns == 0 || theRows == 0) && (theColumns != 0 || theRows != 0))
{
cout<<"Either both or neither rows and columns should be zero ";
}
this->theColumns = theColumns;
this->theRows = theRows;
element = new T[theColumns * theRows];
}
template<class T>
matrix<T>::matrix(const matrix<T>& m)
{
theColumns = m.theColumns;
theRows = m.theRows;
size_t number = theColumns * theRows;
element = new T[number];
copy(m.element, m.element + number, element);
}
template<class T>
matrix<T>& matrix<T>::operator=(const matrix<T>& m)
{
if (this != &m)
{
delete[] element;
theColumns = m.theColumns;
theRows = m.theRows;
size_t number = theColumns * theRows;
element = new T[number];
copy(m.element, m.element + number, element);
}
return *this;
}
template<class T>
T& matrix<T>::operator()(int i, int j) const
{
if (i<1 || i>theRows || j<1 || j>theColumns)
{
cout<<"Matrix Index Out Of Bounds ";
}
return element[(i - 1)*theColumns + j - 1];
}
//矩阵相加
template<class T>
matrix<T> matrix<T>::operator+(const matrix<T>& m)const
{
if (theRows != m.theRows || theColumns != m.theColumns)
{
cout<< "Matrix Size is Out of batch ";
}
matrix<T> w(theRows, theColumns);
size_t number = theColumns*theRows;
for (int i = 0; i < number; i++)
{
w.element[i] = element[i] + m.element[i];
}
return w;
}
//矩阵相乘
template<class T>
matrix<T> matrix<T>::operator*(const matrix<T>& m)const
{
if (theColumns != m.theRows || theRows != m.theColumns)
{
cout<<"Matrix Style is Out of batch ";
}
matrix<T> w(theRows, theColumns);
int ct = 0;
int cm = 0;
int cw = 0;
for (int i = 1; i <= theRows; i++)
{
for (int j = 1; j <= theColumns; j++)
{
T sum = element[ct] * m.element[cm];
for (int k = 2; k <= theColumns; k++)
{
ct++;
cm += m.theColumns;
sum += element[ct] * m.element[cm];
}
w.element[cw++] = sum;
ct -= theColumns - 1;
cm = j;
}
ct += theColumns;
cm = 0;
}
return w;
}
//输入矩阵
template<class T>
void matrix<T>::Input()
{
size_t number = theColumns * theRows;
for (int i = 0; i < number; i++)
{
cin >> element[i];
}
cout << "Input fanished" << endl;
return;
}
//输出矩阵
template<class T>
void matrix<T>::Output()
{
size_t number = theColumns * theRows;
for (int i = 0; i < theRows; i++)
{
for (int j = 0; j < theColumns; j++)
{
cout << element[i*theColumns + j] << " ";
}
cout << endl;
}
cout << "Output finished " << endl;
return;
}
int main()
{
matrix<int> a(3, 3);
matrix<int> b(3, 3);
matrix<int> c(3, 3);
matrix<int> d(3, 3);
a.Input();
b.Input();
c= a * b;
d=a+b;
c.Output();
d.Output();
return 0;
}
c++矩阵的更多相关文章
- C语言 · 矩阵乘法 · 算法训练
问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...
- 获取Canvas当前坐标系矩阵
前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...
- CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换
CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换 三维世界里的旋转(rotate),可以用一个3x3的矩阵描述:可以用(旋转角度float+旋转轴vec3)描述.数学家欧拉证明了这两种形式可 ...
- “为什么DirectX里表示三维坐标要建一个4*4的矩阵?”
0x00 前言 首先要说明的是,本文的标题事实上来自于知乎上的一个同名问题:为什么directX里表示三维坐标要建一个4*4的矩阵? - 编程 .因此,正如Milo Yip大神所说的这个标题事实上是存 ...
- js实现蛇形矩阵
参加腾讯前端实习生笔试,真的是被虐了千百遍,除了一条js程序题,其他半点前端都没有,都是考算法,计算机原理,数据结构.下面贴上腾讯笔试最后三大条中的一条,实现一个蛇形矩阵的输出.蛇形矩阵的什么样这里我 ...
- ACM 中 矩阵数据的预处理 && 求子矩阵元素和问题
我们考虑一个$N\times M$的矩阵数据,若要对矩阵中的部分数据进行读取,比如求某个$a\times b$的子矩阵的元素和,通常我们可以想到$O(ab)$的遍历那个子矩阵,对它的各 ...
- PAT 1050. 螺旋矩阵(25)
本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...
- [LeetCode] Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- [LeetCode] Longest Increasing Path in a Matrix 矩阵中的最长递增路径
Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...
- [LeetCode] Smallest Rectangle Enclosing Black Pixels 包含黑像素的最小矩阵
An image is represented by a binary matrix with 0 as a white pixel and 1 as a black pixel. The black ...
随机推荐
- hihocoder 1080 线段树(区间更新)
题目链接:http://hihocoder.com/problemset/problem/1080 , 两种操作的线段树(区间更新). 这道题前一段时间一直卡着我,当时也是基础不扎实做不出来,今天又想 ...
- JS中的toString()和valueOf()方法
1.toString()方法:主要用于Array.Boolean.Date.Error.Function.Number等对象转化为字符串形式.日期类的toString()方法返回一个可读的日期和字符串 ...
- WCF的问题
使用service调用WCF的时候,有时候会出现 其他信息: HTTP 无法注册 URL 进程不具有此命名空间的访问权限 这样的问题,这时候就需要进行如下尝试: 1,VS的管理权限使用管理员的权限. ...
- Java 使用正则表达式取出图片地址以及跳转的链接地址,来判断死链(一)
任务:通过driver的getPageSource()获取网页的源码内容,在把网页中图片链接地址和跳转的url地址进行过滤,在get每个请求,来判断是否是死链 如图: 获取网页源码中所有的href,以 ...
- js 封装父页面子页面交互接口
定义标准接口 Interface= {}; Interface.ParentWin = {}; Interface.ChildWin = {}; /** * 父页面提供的标准接口函数名称 */ Int ...
- Object.prototype.toString的应用
使用Object.prototype上的原生toString()方法判断数据类型,使用方法如下: Object.prototype.toString.call(value)1.判断基本类型: Obje ...
- MicroService 微服务提供者搭建
本机IP为 192.168.1.102 1. 新建Maven项目 microservice 2. pom.xml <project xmlns="http://maven. ...
- CVE-2018-4878
0x00前言 该漏洞影响 Flash Player 版本28.0.0.137以及之前的所有版本 0x01 poc Poc 这里只列出关键代码 public function triggeruaf() ...
- PAT (Advanced Level) Practise - 1092. To Buy or Not to Buy (20)
http://www.patest.cn/contests/pat-a-practise/1092 Eva would like to make a string of beads with her ...
- 题解 P3367 【【模板】并查集】
#include<iostream> #include<cstdio> using namespace std; int n,m,x,y,z; ]; //f[i]表示i的祖先 ...