c++学习笔记 -- 函数模板与类模板的综合运用

来源:互联网 发布:浏览器向后端提交数据 编辑:程序博客网 时间:2024/06/05 18:04

一维数组 接受 普通数据类型 以及 自定义 复数类 

#include<iostream>#include<iomanip>#include<math.h>#include<cassert>using namespace std;class Complex;ostream operator<<(ostream& out,const Complex& c);Complex Add(const int a,const Complex &c1);Complex Jian(const int a,const Complex &c1);Complex Chen(const int a,const Complex &c1);Complex Chu(const int a,const Complex &c1);class Complex{friend Complex Add(const int a,const Complex &c1);friend Complex Jian(const int a,const Complex &c1);friend Complex Chen(const int a,const Complex &c1);friend Complex Chu(const int a,const Complex &c1);public:Complex(double r=0, double i=0) :real(r), imag(i){}~Complex(){}Complex operator+(const Complex& c1)const;Complex operator-(const Complex& c1)const;Complex operator*(const Complex& c1)const;Complex operator/(const Complex& c1)const;Complex operator-();Complex operator++();Complex operator++(int);bool operator==(const Complex& c1)const;bool operator!=(const Complex& c1)const;bool operator>(const Complex& c1)const;bool operator<(const Complex& c1)const;friend ostream operator<<(ostream& out, const Complex& c);private:double real;double imag;};Complex Complex::operator+(const Complex& c1)const{Complex temp;temp.real = real + c1.real;temp.imag = imag + c1.imag;return temp;}Complex Complex::operator-(const Complex& c1)const{Complex temp;temp.real = real - c1.real;temp.imag = imag - c1.imag;return temp;}Complex Complex:: operator*(const Complex& c1)const{Complex temp;temp.real = real * c1.real;temp.imag = imag * c1.imag;return temp;}Complex Complex:: operator/(const Complex& c1)const{Complex temp;temp.real = real / c1.real;temp.imag = imag / c1.imag;return temp;}Complex Add(const int a,const Complex &c1){Complex temp;temp.real = a + c1.real;temp.imag = c1.imag;return temp;}Complex Jian(const int a,const Complex &c1){Complex temp;temp.real = c1.real - a;temp.imag = c1.imag;return temp;}Complex Chen(const int a,const Complex &c1){Complex temp;temp.real = c1.real * a;temp.imag = c1.imag;return temp;}Complex Chu(const int a,const Complex &c1){Complex temp;temp.real = c1.real / a;temp.imag = c1.imag;return temp;}Complex Complex::operator-(){return Complex(-real, -imag);}Complex Complex::operator++(){++real;++imag;return Complex(real, imag);}Complex Complex::operator++(int){Complex temp(*this);real++;imag++;return temp;}bool Complex::operator==(const Complex& c1)const{return real == c1.real&&imag == c1.imag;}bool Complex::operator!=(const Complex& c1)const{return real != c1.real && imag != c1.imag;}bool Complex::operator>(const Complex& c1)const{if(sqrt(real*real+imag*imag)>(c1.real*c1.real+c1.imag*c1.imag)){return true;}else{return false;}}bool Complex:: operator<(const Complex& c1)const{if(sqrt(real*real+imag*imag)<(c1.real*c1.real+c1.imag*c1.imag)){return true;}else{return false;}}ostream operator<<(ostream& out, const Complex& c){out <<"实部 "<<c.real<< " 虚部 "<<c.imag<<"i"<<endl;return out;}template<class T>class Array{public:Array(int sz = 50);Array(const T* li,int n);~Array();Array(const Array<T>&a);Array<T>& operator=(const Array<T>&rhs);T & operator[](int i);operator T*();void sort(T a[],int n);void sort();void swap(T &x,T &y);void show();private:int size;T *list;};template<class T>Array<T>::Array(int sz){assert(sz >= 0);size = sz;list = new T[size];}template<class T>Array<T>::Array(const T* li,int n){assert(n >= 0);size = n;list = new T[size];for(int i =0;i<size;i++){list[i] = li[i];}}template<class T>Array<T>::~Array(){delete []list;}template<class T>Array<T>::Array(const Array<T>&a){size = a.size;list = new T[size];for(int i=0;i<size;i++){list[i] = a.list[i];}}template<class T>Array<T>& Array<T>:: operator=(const Array<T>&rhs){if(&rhs!=this){if(size!=rhs.size){delete []list;size = rhs.size;list = new T[size];}for(int i = 0;i<size;i++){list[i] = rhs.list[i];}}return *this;}template<class T>T & Array<T>::operator[](int i){assert(i>=0&&n<size);return list[n];}template<class T>Array<T>::operator T*(){return list;}template<class T>void Array<T>::swap(T &x,T &y){T temp = x;x = y;y = temp;}template<class T>void Array<T>::sort(T a[],int n){for(int i = 0; i<n-1;i++){int minIndex = i;for(int j = i+1;j<n;j++){if(a[j]<a[minIndex])minIndex = j;swap(a[i],a[minIndex]);}}}template<class T>void Array<T>::sort(){for(int i = 0;i<size-1;i++){int minIndex = i;for(int j= i+1;j<size;j++){if(list[j]<list[minIndex])minIndex = j;T temp = list[i];list[i] = list[minIndex];list[minIndex] = temp;}}}template<class T>void Array<T>::show(){for(int i=0;i<size;i++){cout<<list[i]<<" ";}cout<<endl;}int main(){int a[] = {1,5,6,7,2};int num = sizeof(a)/sizeof(int);//cout<<num<<endl;Array<int> b(a,num);b.show();b.sort();b.show();Complex array[5];Complex c1(1, 2), c2(3, 4), c3(2,2),c4(3,3),c5(1,1);array[0] = c1;array[1] = c2;array[2] = c3;array[3] = c4;array[4] = c5;Array<Complex> c(array,5);c.show();c.sort();c.show();return 0;}

集合类 实现增加删除 交并补 排序 包含 相等 的类模板 

#include<iostream>#include<iomanip>#include<cassert>using namespace std;template<class T>class Set{public:Set(int n);Set(T a[],int n);void show();void add(T a);void sort();void remove(T a);Set<T> jiao(Set<T>a);Set<T> bing(Set<T>a);Set<T> cha(Set<T>a);bool xiangdeng(Set<T>a);bool baohan(Set<T>a);private:int size;T *list;};template<class T>Set<T>::Set(int n){size = n;}template<class T>Set<T>::Set(T a[],int n){size = n; list = new T[size];for(int i = 0;i<size;i++){list[i] = a[i];}}template<class T>void Set<T>::show(){for(int i=0;i<size;i++){cout<<list[i]<<" ";}cout<<endl;}template<class T>void Set<T>::sort(){for(int i = 0;i<size-1;i++){int minIndex = i;for(int j= i+1;j<size;j++){if(list[j]<list[minIndex])minIndex = j;T temp = list[i];list[i] = list[minIndex];list[minIndex] = temp;}}}template<class T>void Set<T>::add(T a){bool flag = true;for(int i = 0;i<size;i++){if(list[i] == a){flag = false;}}if(flag == true){T* temp = new T[size+1];for(int i=0;i<size;i++){temp[i] = list[i];}temp[size] = a;delete []list;size++;list = temp;this->sort();}}template<class T>void Set<T>::remove(T a){for(int i = 0;i<size;i++){if(list[i] == a){list[i] = 0;}}this->sort();T* temp = new T[size-1];for( i=1;i<size;i++){temp[i-1] = list[i];}delete []list;size--;list = temp;}template<class T>Set<T> Set<T>::jiao(Set<T>a){int num = 0;for(int i=0;i<size;i++){for(int j = 0;j<a.size;j++){if(list[i] == a.list[j]){num++;}}}T *temp;temp = new T[num];int k = 0;for(i=0;i<size;i++){for(int n = 0;n<a.size;n++){if(list[i] == a.list[n]){temp[k] = list[i];k++;}}}Set<T>t(temp,num);t.sort();return t;}template<class T>Set<T> Set<T>::bing(Set<T>a){int num = size+a.size;T *temp;temp = new T[num];for(int i = 0;i<size;i++){temp[i] = list[i];}for(int j = i,int k=0;j<num;j++,k++){temp[j] = a.list[k];}Set<T>t(temp,num);return t;}template<class T>bool Set<T>::xiangdeng(Set<T>a){if(size != a.size){return false;}int t =0;for(int i = 0;i<size;i++){for(int j = 0;j<a.size;j++){if(list[i] == a.list[j]){t++;}}}if(t == size){return true;}return false;}template<class T>bool Set<T>::baohan(Set<T>a){if(size == a.size){if(this->xiangdeng(a))return true;}if(size > a.size){Set<T>temp = this->jiao(a);if(a.xiangdeng(temp)){return true;}}if(size < a.size){Set<T>temp = this->jiao(a);if(this->xiangdeng(temp)){return true;}}return false;}template<class T>Set<T> Set<T>::cha(Set<T>a){int num = 0;if(!(this->baohan(a))){cout<<"参数应该输入一个全集"<<endl;}if(this->xiangdeng(a)){cout<<"补集是空集"<<endl;}num = a.size - size; bool flag = true;T *temp = new T[num];int k = 0;for(int i = 0;i<a.size;i++){for(int j = 0;j<size;j++){if(a.list[i] == list[j]){flag = false;break;}}if(flag == true){temp[k] = a.list[i];k++;}flag = true;}Set<T> t(temp,num);return t;}int main(){int a[] = {1,2,4,5,6};int v[] = {1,2}; int num = sizeof(a)/sizeof(int);int num2 = sizeof(v)/sizeof(int);Set<int> s(a,num);Set<int> s2(v,num2);s2.show();s.show();bool w = s.baohan(s2);cout<<"s 与 s2是否有包含关系 "<<w<<endl;cout<<"s 与 s2的补集为:";s2.cha(s).show();Set<int> b(a,num);b.show();bool p = s.xiangdeng(b);cout<<"b 与 s 是否相等"<<" "<<p<<endl;bool g = s.baohan(b);cout<<"b 与 s 是否有包含关系"<<" "<<g<<endl;s.add(3);s.show();s.add(3);s.show();s.remove(4);s.show();Set<int>c = s.jiao(b);c.show();bool q = s.xiangdeng(c);cout<<"c 与 s 是否相等"<<" "<<q<<endl;Set<int>d = s.bing(b);d.show();return 0;}


0 0
原创粉丝点击