C++程序设计教程601538精品.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C++程序设计教程601538精品.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 教程 601538 精品
- 资源描述:
-
1、11:28:401C+程序设计教程(第二版)第六章 性能 Chapter 6 Performance 清华大学出版社 11:28:412n提高性能的意义:性能对提高编程能力举足轻重n如何提高性能?以合理使用资源为前提,尽快完成任务的能力称为效率效率影响性能,提高效率就能提高性能n学习目标:1.扩展视野,对同一问题的不同要求,模仿各种编程技巧与空间布局策略,予以应对从而对各种不同的问题,亦能应变自如 2.掌握测试性能的方法,学会测算时/空交换的代价,客观评估自身的编程能力11:28:413第六章内容1.内联函数内联函数(Inline Functions)2.数据结构数据结构(Data Struc
2、tures)3.算法算法(Algorithms)4.数值计算数值计算(Numerical Computation)5.STL算法算法(STL Algorithms)6.动态内存动态内存(Dynamic Memory)7.低级编程低级编程(Lower Programming)11:28:4141.内联函数内联函数(Inline Functions)n做法:将一些反复被执行的简单语句序列做成小函数n用法:在函数声明前加上inline关键字n作用:不损害可读性又能提高性能11:28:4151./=2.#include3.3.boolbool isDigit(charchar);/小函数4.4.int
3、int main()5.forfor(charchar c;cinc&c!=n;)6.ifif(isDigit(c)7.std:cout“Digit.n;8.elseelse std:cout=0&ch=9?1:0;12./=频繁调用的函数:用昂贵的开销换取可读性11:28:4161./=2.#include3.3.intint main()4.forfor(charchar c;cinc&c!=n;)5.ifif(ch=0&ch=9?1:0)6.std:cout“Digit.n;7.elseelse 8.std:cout“NonDigit.n;9./=内嵌代码:开销虽少,但可读性差11:28
4、:417内联方式:开销少,可读性也佳1./=2.#includeninline boolinline bool isDigit(charchar);/小函数nintint main()n forfor(charchar c;cinc&c!=n;)n ifif(isDigit(c)n std:coutDigit.n;n elseelse n std:cout=0&ch=9?1:0;n/=内联标记放在函数声明的前面11:28:418内联函数的使用经验:n函数体适当小,且无循环或开关语句,这样就使嵌入工作容易进行,不会破坏原调用主体如:排序函数不能内联n程序中特别是在循环中反复执行该函数,这样就使嵌
5、入的代码利用率较高如:上例中的isDigit函数n程序并不多处出现该函数调用,这样就使嵌入工作量相对较少,代码量也不会剧增 11:28:4191./=2.#include3.#include4.4.using namespaceusing namespace std;5./-6.6.intint calc1(intint a,intint b)returnreturn a+b;7.7.inline intinline int calc2(intint a,intint b)returnreturn a+b;8./-9.9.intint main()10.intint x1000,y1000,z
6、1000;11.clock_t t=clock();12.forfor(intint i=0;i1000*1000*1000;+i)13.zi=calc1(xi%1000,yi%1000);14.cout(clock()-t)/CLK_TCK“without inlinen;15.t=clock();16.forfor(intint i=0;i1000*1000*1000;+i)17.zi=calc2(xi%1000,yi%1000);18.cout(clock()-t)/CLK_TCKf0605 8.281 without inline2.437 with inline11:28:42112
7、.数据结构数据结构(Data Structures)n揭示:将数据结构实现为数据类型是编程的高级境界,STL容器就是系统提供的现成数据结构n做法:充分和合理使用STL容器,简化复杂问题,提高编程效率与程序性能11:28:4212问题:有许多序列,每个序列都等待验证是否可从顺序数列经过栈操作而得 例如:顺序数列 1,2,3,4,5 待验证序列 3,2,1,5,4 待验证序列 5,3,4,2,111:28:4213采用不同的数据结构#include#include#include/栈方式:#include/向量方式:#includeusing namespace std;11:28:4214栈方式
8、/=intint main()ifstream in(rail.txt);forfor(intint n,line=0;inn&n&in.ignore();)cout(line+?n:);forfor(string s;getline(in,s)&s!=0;)istringstream sin(s);stack st;forfor(intint last=0,coach;sincoach;st.pop()forfor(intint p=last+1;p=coach;+p)st.push(p);if if(lastcoach)last=coach;if if(st.top()!=coach)br
9、eak;coutn&n&in.ignore();)cout(line+?n:);forfor(string s;getline(in,s)&s!=0;)istringstream sin(s);vector st;forfor(intint last=0,coach;sincoach;st.pop_back()forfor(intint p=last+1;p=coach;+p)st.push_back(p);if if(lastcoach)last=coach;if if(st.back()!=coach)break;cout(!sin?Yesn:Non);/=模仿栈操作11:28:4216结
10、论n不同的数据结构有不同的操作和性能n应学习使用不同数据结构的经验11:28:42173.算法算法(Algorithms)揭示:确定了数据结构之后,所采用的算法将直接决定程序的性能;任何语言都有个性,算法的选择使用是灵巧运用语言的艺术,充分发挥语言的优势是活用算法的根本做法:培养经验,用测试的办法对算法进行选择11:28:4218问题:已知不太大的正整数n(n46),求Fibonacci数列 0 1 1 2 3 5 8 13 21 34 的第n项的值对于后面的四种算法:unsigned fibo1(unsigned n);unsigned fibo2(unsigned n);unsigned
展开阅读全文