C++ 简易向量类设计(CVector CPP实现篇)
来源:互联网 发布:java软件开发是什么 编辑:程序博客网 时间:2024/05/24 00:00
#include "Vector.h"//////////////////////////////////////////////////////////构造方法////////////////////////////////////////////////////////CVector::CVector(int count/* =3 */){this->mElement=new double[count];for(int i=1;i<this->length;i++)this->mElement[i]=0;this->mElement[0]=1;this->length=count;this->IsColumn=true;}CVector::CVector(double *p,int count,bool isCol/* =true */){this->mElement=new double[count];this->length=count;this->IsColumn=isCol; }CVector::CVector(CVector &c){this->mElement=new double[c.length];this->length=c.length;this->IsColumn=c.IsColumn;}CVector::~CVector(void){if(this->mElement) delete[] mElement;}/////////////////////////////////////////////////////////////////////////////////功能函数///////////////////////////////////////////////////////////////////////////////CVector CVector::CrossProduct(CVector &vec){if(vec.length=3&&vec.length==this->length){CVector temp;temp[0]=this->mElement[1]*vec[2]-this->mElement[2]*vec[1];temp[1]=this->mElement[2]*vec[0]-this->mElement[0]*vec[2];temp[2]=this->mElement[0]*vec[1]-this->mElement[1]*vec[0];return temp;}else{throw MatrixSizeException();}}CMatrix CVector::MatrixProduct(CVector &vec){if(vec.length==this->length){if(!vec.IsColumn&&this->IsColumn){CMatrix temp1=CMatrix(this->mElement,this->length,1);CMatrix temp2=CMatrix(vec.mElement,1,this->length);return temp1*temp2;}else if(vec.IsColumn&&!this->IsColumn){CMatrix temp1=CMatrix(this->mElement,1,this->length);CMatrix temp2=CMatrix(vec.mElement,this->length,1);return temp1*temp2;}else{return CMatrix::DiagMatrix(this->length,(*this)*vec);}}else{throw MatrixSizeException();}}double CVector::Mod(){double sum=0;for(int i=0;i<this->length;i++)sum+=pow((*this)[i],2);return sqrt(sum);}void CVector::Normalize(){double sum=this->Mod();if(sum!=0.0){double f=1.0/sum;for(int i=0;i<this->length;i++)this->mElement[i]*=f;}}/////////////////////////////////////////////////////////////////////////////////重载运算符///////////////////////////////////////////////////////////////////////////////CVector& CVector::operator= (CVector &vec){if(&vec==this)return *this;if(this->mElement)delete[] mElement;this->mElement=new double[vec.length];this->length=vec.length;this->IsColumn=vec.IsColumn;for(int i=0;i<this->length;i++)this->mElement[i]=vec.mElement[i];return This;}inline double& CVector::operator[](int i){if(i>this->length||i<0)throw MatrixSizeException();elsereturn this->mElement[i];}double CVector::operator*(CVector& vec){if(this->length!=vec.length)throw MatrixSizeException();double sum=0.0;for(int i=0;i<this->length;i++)sum+=(*this)[i]*vec[i];return sum;}CVector CVector::operator*(double num){CVector temp=CVector(this->length);for(int i=0;i<this->length;i++)temp[i]=(*this)[i]*num;return temp;}CVector CVector::operator+(CVector& vec){if(this->length!=vec.length)throw MatrixSizeException();CVector temp=CVector(this->length);for(int i=0;i<this->length;i++)temp[i]=(*this)[i]+vec[i];return temp;}CVector CVector::operator-(CVector& vec){if(this->length!=vec.length)throw MatrixSizeException();CVector temp=CVector(this->length);for(int i=0;i<this->length;i++)temp[i]=(*this)[i]-vec[i];return temp;}CVector CVector::operator-(){for(int i=0;i<this->length;i++)(*this)[i]*=-1;return (*this);}bool CVector::operator==(CVector &vec){if(this->length!=vec.length)throw MatrixSizeException();bool result=true;for(int i=0;i<this->length;i++){if(this->mElement[i]!=vec[i]){result=false;break;}}return result;}/////////////////////////////////////////////////////////////////////////////////static method///////////////////////////////////////////////////////////////////////////////CVector CVector::CreateZeroVector(int n){CVector t(n);t[0]=0;return t;}double CVector::GetDistance(CVector &vec1,CVector &vec2){if(vec1.length!=vec2.length)throw MatrixSizeException();double sum=0;for(int i=0;i<vec1.length;i++)sum+=pow(vec1[i]-vec2[i],2);return sqrt(sum);}
0 0
- C++ 简易向量类设计(CVector CPP实现篇)
- C++ 简易向量类设计(CVector H设计篇)
- C++的简易矩阵类设计 (CMatrix cpp实现篇)
- c简易实现数据库
- C/C++--模板类实现.h和.cpp分离
- f0508.cpp 函数指针向量实现菜单驱动函数调用
- 简易的C与CPP编译的makefile
- C实现-CPP的-封装
- C实现-CPP的-继承
- C实现-CPP的-多态
- C++实现R语言向量化运算(向量类:c 矩阵类:matrix)2015.9.11
- C++实现R语言向量化运算(向量类:c 矩阵类:matrix)2015.9.11
- 向量空间模型文档相似度计算实现(C#)
- 支持向量机SVM的SMO方法实现(C++)
- 简易OA漫谈之工作流设计(DB实现)
- 简易OA漫谈之工作流设计(DB实现)
- go语言实现设计模式(二):简易工厂
- 【C#】简易网页计算器实现
- div布局实例
- java.net.SocketException: Broken pipe
- remains in confict svn 错误解决办法
- three.js 源码注释(四十)Light/PointLight.js
- 01.git基础
- C++ 简易向量类设计(CVector CPP实现篇)
- EXCEL 使用
- 搭建Hadoop2.4+Ubuntu12.04+Eclipse4.3
- 将archlinux 2013-06-01版,安装配置为个人工作站
- UILabel设置下划线
- 算法与数据结构基础9:C++实现有向图——邻接矩阵存储
- mahout入门指南之mahout单机版推荐算法
- php 关于程序提高执行效率的方面
- three.js 源码注释(四十一)Light/AmbientLight.js