头文件
#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];
}
测试源文件
#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;
}