![]() |
#2
lintaoyn2010-06-02 19:47
//#include <stdafx.h>
#include <iostream> using namespace std; #include "iomanip" template <class T> class Array { private: T *phead;int H; public : Array(T *a,int h) { T *t; H=h; phead=new int[H]; t=phead; for(int i=0;i<H;i++) *t++=*a++; } ~Array(){delete []phead;} void Sort(); void Search(int a); friend ostream & operator<<(ostream &out,Array<T> &a); }; template <class T> ostream & operator<<(ostream &out,Array<T> &a) { out<<"输出结果:"<<endl; for(int i=0;i<a.H;i++) out<<setw(4)<<*(a.phead+i); out<<endl; return out; } template <class T> void Array<T>::Sort() { int i,j,k,temp; for(i=0;i<H;i++) { k=i; for(j=i+1;j<H;j++) if(*(phead+k)>*(phead+j))k=j; if(k!=i) { temp=*(phead+i); *(phead+i)=*(phead+k); *(phead+k)=temp; } } } template <class T> void Array<T>::Search(int a) { int i,k=0; T *temp; temp=phead; for(i=0;i<H;i++) { if(a==*(temp+i)) { k=1;break; } } if(k==1)cout<<"找到其下标为:"<<i<<endl; else cout<<"No find !"<<endl; } int main(int argc, char* argv[])//我用的是绿色版的VC6,给你改成这个样子了。 { int a[6]={4,6,7,3,8,1}; Array <int> A(a,6); cout<<A; A.Sort(); cout<<A; A.Search(5); return 0; } |

#include "stdafx.h"
#include "iostream"
using namespace std;
#include "iomanip"
template <class T>
class Array
{
private:
T *phead;int H;
public :
Array(T *a,int h)
{
T *t;
H=h; phead=new T[H]; t=phead;
for(int i=0;i<H;i++)
*t++=*a++;
}
~Array(){delete []phead;}
void Sort();
void Search(T a);
T Sum();
template <class X>
friend ostream & operator<<(ostream &out,Array<X> &a);
//void Display();
};
template <class X>
ostream & operator<<(ostream &out,Array<X> &a)
{
out<<"输出结果:"<<endl;
for(int i=0;i<a.H;i++)
out<<setw(4)<<*(a.phead+i);
out<<endl;
return out;
}
template <class T>
void Array<T>::Sort()
{
int i,j,k;T temp;
for(i=0;i<H;i++)
{
k=i;
for(j=i+1;j<H;j++)
if(*(phead+k)>*(phead+j))k=j;
if(k!=i)
{ temp=*(phead+i);
*(phead+i)=*(phead+k);
*(phead+k)=temp;
}
}
}
template <class T>
void Array<T>::Search(T a)
{
int i,k=0;
T *temp; temp=phead;
for(i=0;i<H;i++)
{ if(a==*(temp+i))
{
k=1;break;
}
}
if(k==1)cout<<"找到其下标为:"<<i<<endl;
else
cout<<"No find !"<<endl;
}
template <class T>
T Array<T>::Sum()
{
T sum=0.0;
int i;
for(i=0;i<H;i++)
sum=sum+*(phead+i);
return sum;
}
/*template <class T>
void Array<T>::Display()
{
cout<<"结果:"<<endl;
for(int i=0;i<H;i++)
cout<<setw(4)<<*(phead+i);
cout<<endl;
}*/
int _tmain(int argc, _TCHAR* argv[])
{
int a[6]={4,6,7,3,8,1};
double b[6]={4.3,6.5,7.6,3.3,8.7,1.9};
Array <int> A(a,6);
//A.Display();
cout<<A;
A.Sort();
//A.Display();
cout<<A;
A.Search(8);
cout<<"数组和:"<<A.Sum()<<endl;
Array <double> B(b,6);
//B.Display();
cout<<B;
B.Sort();
//B.Display();
cout<<B;
B.Search(3.3);
cout<<"数组和:"<<B.Sum()<<endl;
return 0;
}
友元重载<<运算符出错 没办法了 有错不会改 来求救了#include "iostream"
using namespace std;
#include "iomanip"
template <class T>
class Array
{
private:
T *phead;int H;
public :
Array(T *a,int h)
{
T *t;
H=h; phead=new T[H]; t=phead;
for(int i=0;i<H;i++)
*t++=*a++;
}
~Array(){delete []phead;}
void Sort();
void Search(T a);
T Sum();
template <class X>
friend ostream & operator<<(ostream &out,Array<X> &a);
//void Display();
};
template <class X>
ostream & operator<<(ostream &out,Array<X> &a)
{
out<<"输出结果:"<<endl;
for(int i=0;i<a.H;i++)
out<<setw(4)<<*(a.phead+i);
out<<endl;
return out;
}
template <class T>
void Array<T>::Sort()
{
int i,j,k;T temp;
for(i=0;i<H;i++)
{
k=i;
for(j=i+1;j<H;j++)
if(*(phead+k)>*(phead+j))k=j;
if(k!=i)
{ temp=*(phead+i);
*(phead+i)=*(phead+k);
*(phead+k)=temp;
}
}
}
template <class T>
void Array<T>::Search(T a)
{
int i,k=0;
T *temp; temp=phead;
for(i=0;i<H;i++)
{ if(a==*(temp+i))
{
k=1;break;
}
}
if(k==1)cout<<"找到其下标为:"<<i<<endl;
else
cout<<"No find !"<<endl;
}
template <class T>
T Array<T>::Sum()
{
T sum=0.0;
int i;
for(i=0;i<H;i++)
sum=sum+*(phead+i);
return sum;
}
/*template <class T>
void Array<T>::Display()
{
cout<<"结果:"<<endl;
for(int i=0;i<H;i++)
cout<<setw(4)<<*(phead+i);
cout<<endl;
}*/
int _tmain(int argc, _TCHAR* argv[])
{
int a[6]={4,6,7,3,8,1};
double b[6]={4.3,6.5,7.6,3.3,8.7,1.9};
Array <int> A(a,6);
//A.Display();
cout<<A;
A.Sort();
//A.Display();
cout<<A;
A.Search(8);
cout<<"数组和:"<<A.Sum()<<endl;
Array <double> B(b,6);
//B.Display();
cout<<B;
B.Sort();
//B.Display();
cout<<B;
B.Search(3.3);
cout<<"数组和:"<<B.Sum()<<endl;
return 0;
}
[ 本帖最后由 tonlin 于 2010-6-2 23:26 编辑 ]