首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

焦急的:c++模板有关问题请问

2012-02-20 
焦急的求助:c++模板问题请教我在自学殷人昆著的《数据结构》,书中大部分算法是用模板描述的。最近我想检验各

焦急的求助:c++模板问题请教
我在自学殷人昆著的《数据结构》,书中大部分算法是用模板描述的。最近我想检验各种排
序算法的C++实现,于是我想用模板定义各种算法,再实例化,来检测各种算法的复杂度.但
由于是很久以前学的模板知识,并且当时也不怎么认真,这几天找了很多资料,都觉得对自己
没什么启示(主要是针对下边这段代码的模板实例化而言),看哪位大侠能给我指点迷津,
或者能否就该书中的一个模板写个完整的程序作例子?(下边的程序主要是来自该书中的
第21,22及302,304页,注释部分中打?的为我感到迷惑的)。
#include <iostream>
using   namespace   std;
const   int   DefaultSize=100;
template <class   Type> class   datalist;//数据表的前视声明
template <class   Type> class   Element   {//数据表元素类的定义
                private:
                                Type   key;//关键码
                                //field   otherdata;//其它数据成员
                public:
                                Type   getKey(){return   key;}//取当前结点的关键码
                                void   setKey(const   Type   x)   {key=x;}/*修改当前关键码.*/
                                Element <Type>   &operator=(Element <Type>   &x){this=x;}//赋值符号重

                                int   operator==(Type   &x){return!(this <x||x <this);}//判this与X相

                                int   operator!=(Type   &x){return   this <x||x <this;}/*判this与x不等
。*/
                                int   operator <=(Type   &x){return   !(this> x);}
                                int   operator> =(Type   &x){return   !(this <x);}
                                int   operator <(Type   &x){return   this <x;}
                friend   ostream&   operator < <(ostream&outStream,const   datalist <Type> &   lis
t);//输出重载操作符.
                                friend   istream&   operator> > (istream&   inSream,const   datalist <Typ
e> &list);   //输入重戴操作符.
};
template <class   Type> class   datalist{//用顺序表储存待排序的元素.
                public:
                                datalist(int   MaxSz=DefaultSize):MaxSize(Maxsz),CurrentSize(0)/
*这一行是不是参数列表?*/
                                {Vector=new   Element <Type> [MaxSz];}
                                void   swap(Element <Type>   &x,Element <Type>   &y)


                                {Element <Type> temp=x;x=y;y=temp;}
                private:
                                Element <Type>   *Vector;//存储待排序元素的向量
                                int   MaxSize,CurrentSize;/*向量中最大元素个数与当前元素个数。*/

};
template <class   Type> ostream&operator   < <(ostream&   Outstream,const   datalist <Type
> &list){
                Outstream < < "Array   Contents:\n ";
                for(int   i=0;i <list.CurrentSize;i++)
                                OutStream < <endl;
                OutStram < < "Array   Current   Size: " < <list.CurrentSize < <endl;
                return   OutStream;
}template <class   Type> istream&   operator> > (istream&InStream,datalist <Type> &list)
{
                cout < < "Enter   array   Current   Size: ";
                Instream> > list.CurrentSize;
                cout < < "Enter   array   elements:\n ";
                for(int   i=0;i <list.CurrentSize;i++){
                                InStream> > list.Element[i];
                }
                return   InStream;
}  
//下边为直接插入算法的模板。按关键码key非递减顺序对表进行排序。
template <class   Type> void   InsertionSort(datalist <Type>   &list){
                for(int   i=1;i <list.currentSize;i++)Insert(list,i);}
/*将元素list.Vector[i]按其关键码插入到有序表list.Vector[0],...list.Vector[i-1]
中,使得list.Vector[0]到list.Vector[i]有序。*/
template <class   Type>   void   Insert(datalist <Type>   &list,int   i){
                Element <Type> temp=list.Vector[i];int   j=i;
                while(j> 0&&temp.getKey() <list.Vector[j-1].getKey()){
                                list.Vector[j]=list.Vector[j-1];j--;
                }
                list.Vector[j]=temp;
}
//下边为主函数,也是我感到迷惑的地方?    
int     main()
{
      int   MaxSz   =15;//
               
                datalist <int> list   (MaxSz   );//这样实例化对不对?
                cout < < "Enter   the   numbers   : " < <endl;


                cin> > list   ;
                InsertionSort(&list   );
                cout < < "Afer   sort: " < <endl;
                cout < <list   < <endl;
  return   1;
}
        编译时,提示为 "error   C2664:   'InsertionSort '   :   cannot   convert   parameter   1   fr
om   'class   datalist <int>   * '   to   'class   datalist <int>   & '
                A   reference   that   is   not   to   'const '   cannot   be   bound   to   a   non-lvalue
Error   executing   cl.exe. "     请问该怎么解决?我昨晚找了很多电子资料,可惜都没找到能
解决方法,一直郁闷到现在,请各路神仙搭救。


[解决办法]
InsertionSort(list );
这个和模板无关,是你最基本的C++传参知识都还没掌握。
最好买本C++ Primer多补课
[解决办法]
datalist(int MaxSz=DefaultSize):MaxSize(Maxsz),CurrentSize(0)/*这一行是不是参数列表?*/
对MaxSize,CurrentSize进行初试化,此地为初试化列表

datalist <int> list (MaxSz );//这样实例化对不对?
这样的定义确实不对,

F:\My Projects\sorting\common.cpp(48) : error C2065: 'Instream ' : undeclared identifier
注意大小写,后面是InStream,前后不一致,肯定要说你没有定义了

F:\My Projects\sorting\common.cpp(42) : error C2065: 'OutStream ' : undeclared identifier
错误同上

'CurrentSize ' 换个名字试试

热点排行