- 1、本文档共99页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
unit06模板与数据结构解读
图6.6中,第5列就已排好序,若再继续下一趟就不会发生交换。 选学内容 索引,就象一本书的目录,找到标题,再看一下页号,立即可以翻到。如果每一个查找对象的数据元素很大,比如一个学生的简历,要排序也挺麻烦,去查找也不方便。如果每位同学的简历对应一个指针,构成一个数组,而把学生学号作为数组元素的下标,这样就形成了一个指针数组,找到学号对应元素,其所保存的指针值,即简历的地址,查找起来要方便多了,称索引查找(Index Search)。参见图6.8。 函数名对应于该函数执行代码的入口地址。通过取地址运算符“”也可以取得函数的入口地址。指向函数的指针可以作为函数的参数传递。 由于一个函数不能以函数作为参数,所以当一个函数需要将函数作为参数时必须借用指向函数的指针(也可以用包含该函数的类对象)。 指向类成员函数的指针很少使用, 了解内容 这个经验很重要:先撇开标识符,按从右到左的顺序逐个解释每个说明符,如果有括号则改变解释的先后,先解释括号内再解释扩号外。 //seqlisti[10]=31; //实验能否增加元素 //for(j=0;j11;j++) coutseqlisti[j] ; //coutendl; 注意:类类型对象之间的比较 没有定义 【例6.11】求积分的类模板 templatetypename Tclass Integer{ double a,b,step,result; int n; //分区数量 T cf; //被积函数 public: Integer(double aa=0, double bb=0, int nn=100){ a=aa; b=bb; n=nn; integerate(); } void putlimits(double aa=0, double bb=0, int nn=100){ //修改上下限和分区数 a=aa; b=bb; n=nn; } void integerate(); void print(){cout定积分值为:resultendl;} }; 【例6.11】求积分的类模板 templatetypename Tvoid IntegerT::integerate(){ step=(b-a)/n; result=(cf.fun(a)+cf.fun(b))/2; for (int i=1;in;i++) result+=cf.fun(a+i*step); result*=step;} int main(){ IntegerF1 integer1(0.0,3.0,1000); integer1.print(); IntegerF2 integer2(0.0,3.0,1000); integer2.print(); IntegerF3 integer3(0.0,3.0,1000); integer3.print(); return 0;} 【例6.12】求积分的函数模板 templatetypename Tdouble integer (T cf,float a, float b,int n){ double result,step; result=(cf.fun(a)+cf.fun(b))/2; step=(b-a)/n; for (int i=1;in;i++) result+=cf.fun(a+i*step); result*=step; return result;} int main(){ F1 f1;F2 f2;F3 f3; double fixint1, fixint2, fixint3; int n=1000; fixint1=integer(f1,0.0,3.0,n); fixint2=integer(f2,0.0,3.0,n); fixint3=integer(f3,0.0,3.0,n); coutfixint1\nfixint2\nfixint3\n; return 0;} 【例6.13】用函数指针实现梯形法求积分 double integer (double (*func)(double),double a,double b){ double result,step; result=((*func)(a)+(*func)(b))/2; //亦可用func,括号也省略 step=(b-a)/100; for (int i=1;i100;i++) result+=(*func)(a+i*step); result
文档评论(0)