頭文件ios
#ifndef VECTOR_CONTAINER_H_ #define VECTOR_CONTAINER_H_ struct Vector { float v[4]; Vector() { for (int i = 0; i < 4 ;++i) { v[i] = 0; } } Vector(float ve[]) { for (int i = 0; i < 4; ++i) { v[i] = ve[i]; } } void output() ; }; class VectorContainer { public: VectorContainer(); // Copy Constructor, need deep copy. VectorContainer(const VectorContainer& other); VectorContainer(Vector *vectors, int size); ~VectorContainer(); Vector& operator[](int index); Vector* operator->(); void operator()(); Vector& operator()(int i); float operator()(int i, int j); private: // This is a pointer point to a array of Vector. Vector* vectors_; // The size of the array of Vector. int size_; }; #endif /*VECTOR_CONTAINER_H*/
.cpp測試
#include <iomanip> #include "vector_container.h" #include <iostream> using namespace std; void Vector::output() { int i; float sum=0.0; for(i=0; i<4; i++) { sum=sum+v[i]; cout<<v[i]<<endl; } cout<<"Sum is "<<sum<<endl; } VectorContainer::VectorContainer(const VectorContainer& other) { int i; size_=other.size_; vectors_=new Vector[size_+1]; for(i=0;i<size_;i++) { vectors_[i]=other.vectors_[i]; } } VectorContainer::VectorContainer(Vector *vectors, int size) { int i; size_=size; vectors_=new Vector[size_+1]; if(vectors_!=NULL) { for(i=0;i<size_;i++) vectors_[i]=vectors[i]; } } VectorContainer:: ~VectorContainer() { delete []vectors_; vectors_=NULL; cout<<"Destructor is called"<<endl; } Vector& VectorContainer::operator[](int index) { int i; if(index>=0&&index<=size_-1) { for(i=0;i<4;i++) { cout<<fixed<<showpoint; cout<<setprecision(2)<<vectors_[index].v[i]<<endl; } } return vectors_[index]; } Vector* VectorContainer::operator->() { int i,j,flag; float sum=0.0,temp; for(i=0;i<size_;i++) { temp=0.0; for(j=0;j<4;j++) { temp=temp+vectors_[i].v[j]; } if(temp>sum) { sum=temp; flag=i; } } return &vectors_[flag]; } void VectorContainer::operator()() { int i,j,k; float temp,sum; float s[1000]; for(i=0;i<size_;i++) { sum=0.0; for(j=0;j<4;j++) { sum=sum+vectors_[i].v[j]; } s[i]=sum; } for(j=0;j<size_-1;j++) { for(i=0;i<size_-1-j;i++) { if(s[i]>s[i+1]) { temp=s[i]; s[i]=s[i+1]; s[i+1]=temp; for(k=0;k<4;k++) { temp=vectors_[i].v[k]; vectors_[i].v[k]=vectors_[i+1].v[k]; vectors_[i+1].v[k]=temp; } } } } for(i=0;i<size_;i++) { cout<<"Case "<<i<<":"<<endl; vectors_[i].output(); cout<<endl; } } Vector& VectorContainer::operator()(int i) { int m,j,k; float temp,sum; float s[1000]; for(m=0;m<size_;m++) { sum=0.0; for(j=0;j<4;j++) { sum=sum+vectors_[m].v[j]; } s[m]=sum; } for(j=0;j<size_-1;j++) { for(m=0;m<size_-1-j;m++) { if(s[m]>s[m+1]) { temp=s[m]; s[m]=s[m+1]; s[m+1]=temp; for(k=0;k<4;k++) { temp=vectors_[m].v[k]; vectors_[m].v[k]=vectors_[m+1].v[k]; vectors_[m+1].v[k]=temp; } } } } cout<<"Case "<<i<<":"<<endl; vectors_[i].output(); // output the ith // return vectors_[i]; } float VectorContainer::operator()(int i, int j) { cout<<fixed<<showpoint; cout<<setprecision(2)<<vectors_[i].v[j]<<endl; return vectors_[i].v[j]; }
測試源文件spa
#include "vector_container.h" #include<iostream> using namespace std; int main() { float test1[4]={9.2,8.3,7.4,10.7}; float test2[4]={1.0,3.0,2.0,4.0}; float test3[4]={77.0,18.0,27.0,10.0}; Vector v[3]; v[0]=test1; v[1]=test2; v[2]=test3; Vector *ptr=v; VectorContainer mytest(ptr,3); mytest(); return 0; }