找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1585|回复: 0

指向类成员的指针

[复制链接]
发表于 2009-11-4 01:09:10 | 显示全部楼层 |阅读模式 IP:江苏扬州
程序如下:在给成员指针函数赋值的时候,可能不匹配,不知道谁能帮我改改吗?先谢谢了
#include<iostream>
#include<cmath>
using namespace std;
template<class T>
class WinnerTree{
public:
WinnerTree(int TreeSize=10);
~WinnerTree(){delete [] t;}
void Initialize(T a[],int size,int (*winner)(T a[],int b,int c));
int Winner() const{return(n)?t[1]:0;}
void RePlay(int i,int(*winner)(T a[],int b,int c));
void print(int *);
int compare(T c[],int c1,int c2);
int *t;
T *e;
private:
int MaxSize;
int n;
int LowExt;
int offset;
void Play(int p,int lc,int rc,int(*winner)(T a[],int b,int c));
};
template<class T>
WinnerTree<T>::WinnerTree(int TreeSize)
{
MaxSize=TreeSize;
t=new int[MaxSize];
n=0;
}
template<class T>
void WinnerTree<T>::Initialize(T a[],int size,int(*winner)(T a[],int b,int c))
{
if(size>MaxSize||size<2);
// throw BadInput();

e=a;
n=size;
cout<<"size="<<size<<endl;
cout<<"n="<<n<<endl;
int i,s;
for(s=1;2*s<=n-1;s+=s);
cout<<"s="<<s<<endl;
LowExt=2*(n-s);
offset=2*s-1;
cout<<"LowExt="<<LowExt<<endl;
for(i=2;i<=LowExt;i+=2)
{
Play((offset+i)/2,i-1,i,winner);
cout<<"i="<<i<<endl;
}
cout<<"**********"<<endl;
if(n%2){
Play(n/2,t[n-1],LowExt+1,winner);
i=LowExt+3;}
else
i=LowExt+2;
for(;i<=n;i+=2)
Play((i-LowExt+n-1)/2,i-1,i,winner);
}
template<class T>
void WinnerTree<T>::Play(int p,int lc,int rc,int(*winner)(T a[],int b,int c))
{
t[p]=winner(e,lc,rc);
// cout<<"test"<<endl;
while(p>1&&p%2){
t[p/2]=winner(e,t[p-1],t[p]);
p/=2;
}
cout<<"Play"<<endl;
}
template<class T>
void WinnerTree<T>::RePlay(int i,int(*winner)(T a[],int b,int c))
{
if(i<=0||i>n)
throw OutOfBounds();
int p,lc,rc;
if(i<=LowExt){
p=(offset+i)/2;
lc=2*p-offset;
rc=lc+1;}
else{
p=(i-LowExt+n-1)/2;
if(2*p==n-1){
lc=t[2*p];
rc=i;}
else{
lc=2*p-n+1+LowExt;
rc=lc+1;}
}
t[p]=winner(e,lc,rc);
p/=2;
for(;p>=1;p/=2)
t[p]=winner(e,t[2*p],t[2*p+1]);
}
//connect with the function-int(*winner)(T a[],int b,int c)
//template<class T>
template<class T>
int WinnerTree<T>::compare(T c[],int c1,int c2)
{
cout<<"compare"<<endl;
if(c[c1-1]>=c[c2-1])
{
return c[c1-1];
}
else
return c[c2-1];
}
template<class T>
void WinnerTree<T>::print(int *p)
{
for(int t=0;t<sizeof(p);t++)
cout<<"t"<<t<<"="<<p[t]<<'\t';
cout<<endl;
}
int main()
{
WinnerTree<int> w(8);
WinnerTree<int> *pw=&w;
int out[8]={10,10,10,10,
10,10,10,10};
pw->Initialize(out,sizeof(out)/sizeof(int),(pw->compare));
return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 01:23 , Processed in 0.161326 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表