向量類

#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(本肥宅得意地叉會腰)

發佈了29 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章