| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 423 人关注过本帖
标题:指向类成员的指针
只看楼主 加入收藏
ztj111
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-7-18
收藏
 问题点数:0 回复次数:0 
指向类成员的指针

程序如下:在给成员指针函数赋值的时候,可能不匹配,不知道谁能帮我改改吗?先谢谢了
#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;
}

搜索更多相关主题的帖子: 指针 成员 
2006-11-14 15:29
快速回复:指向类成员的指针
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028176 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved