向量类

来源:互联网 发布:eve数据地点出什么 编辑:程序博客网 时间:2024/05/18 20:06
#include<algorithm>#include<cstring>#include<iostream>using namespace std;//动态数组实现多维向量点 class Point{private:    int *data;    int dimension;public:    Point(int);    Point(int*,int);    Point operator+(const Point&);    Point operator-(const Point&);    Point& operator=(const Point&);    void print();    ~Point();};Point::Point(int n){dimension = n;data = new int [n];}Point::Point(int *a,int n){data=new int[n];dimension=n;for(int i=0;i<n;i++){data[i]=a[i];}}Point::~Point(){delete[]data;}void Point::print(){std::cout<<"(";for(int i=0;i<dimension;++i){if(i!=0)std::cout<<",";std::cout<<data[i];}std::cout<<")\n";//等下根据输出情况来看下是否需要输出\n }Point& Point::operator=(const Point& p){if(dimension!=p.dimension){delete[]data;dimension=p.dimension;data=new int [dimension];}for(int i=0;i<dimension;i++){data[i]=p.data[i];}return *this;}Point Point::operator +(const Point& p){int d = max(p.dimension,dimension);int* a=new int [d];memset(a,0,d);int t = min(dimension,p.dimension);for(int i=0;i<t;++i){a[i]=data[i]+p.data[i];}if(t < dimension){for(int i=t;i<d;++i){a[i] = data[i];}}else if(t < p.dimension){for(int i=t;i<d;++i){a[i] = p.data[i];}}Point temp(a,d);delete []a;return temp;}Point Point::operator -(const Point& p){int d = max(p.dimension,dimension);int* a=new int [d];memset(a,0,d);int t = min(dimension,p.dimension);for(int i=0;i<t;++i){a[i]=data[i]-p.data[i];}if(t < dimension){for(int i=t;i<d;++i){a[i] = data[i];}}else if(t < p.dimension){for(int i=t;i<d;++i){a[i] = -p.data[i];}}Point temp(a,d);delete []a;return temp;}int main(){ int n,m; cin>>n; int *temp1 = new int [n]; for(int i = 0 ; i < n ; i++)  cin>>temp1[i]; Point a(temp1,n); a.print(); cin>>m; int *temp2 = new int [m]; for(int i = 0 ; i < m ; i++)  cin>>temp2[i]; Point b(temp2,m);  b.print(); delete []temp1; delete []temp2; (a+b).print(); Point c = a-b; c.print(); return 0;}


//比较简单,内附有测试main函数,可以说是非常良心了hhhhh(本肥宅得意地叉会腰)