钱能C++程序设计教程6(精品).ppt





《钱能C++程序设计教程6(精品).ppt》由会员分享,可在线阅读,更多相关《钱能C++程序设计教程6(精品).ppt(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+程序设计教程(第二版)第六章 性能 Chapter 6 Performance 清华大学出版社 钱 能1/29/20231n提高性能的意义:性能对提高编程能力举足轻重n如何提高性能?以合理使用资源为前提,尽快完成任务的能力称为效率效率影响性能,提高效率就能提高性能n学习目标:1.扩展视野,对同一问题的不同要求,模仿各种编程技巧与空间布局策略,予以应对从而对各种不同的问题,亦能应变自如 2.掌握测试性能的方法,学会测算时/空交换的代价,客观评估自身的编程能力1/29/20232第六章内容1.内联函数内联函数(Inline Functions)2.数据结构数据结构(Data Structure
2、s)3.算法算法(Algorithms)4.数值计算数值计算(Numerical Computation)5.STL算法算法(STL Algorithms)6.动态内存动态内存(Dynamic Memory)7.低级编程低级编程(Lower Programming)1/29/202331.内联函数内联函数(Inline Functions)n做法:将一些反复被执行的简单语句序列做成小函数n用法:在函数声明前加上inline关键字n作用:不损害可读性又能提高性能1/29/202341./=2.#include3.3.boolbool isDigit(charchar);/小函数4.4.intin
3、t 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./=频繁调用的函数:用昂贵的开销换取可读性1/29/202351./=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./=内嵌代码:开销虽少,但可读性差1/29/2
4、0236内联方式:开销少,可读性也佳1./=2.#includeninline inline boolbool 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/=内联标记放在函数声明的前面1/29/20237内联函数的使用经验:n函数体适当小,且无循环或开关语句,这样就使嵌入工作容易进行,不会破坏原调用主体如:排序函数不能内联n程序中特别是在循环中反复执行该函数,这样就使
5、嵌入的代码利用率较高如:上例中的isDigit函数n程序并不多处出现该函数调用,这样就使嵌入工作量相对较少,代码量也不会剧增 1/29/202381./=2.#include3.#include4.4.using namespaceusing namespace std;5./-6.6.intint calc1(intint a,intint b)returnreturn a+b;7.7.inline inline intint calc2(intint a,intint b)returnreturn a+b;8./-9.9.intint main()10.intint x1000,y1000
6、,z1000;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 inline1/29/2023
7、102.数据结构数据结构(Data Structures)n揭示:将数据结构实现为数据类型是编程的高级境界,STL容器就是系统提供的现成数据结构n做法:充分和合理使用STL容器,简化复杂问题,提高编程效率与程序性能1/29/202311问题:有许多序列,每个序列都等待验证是否可从顺序数列经过栈操作而得 例如:顺序数列 1,2,3,4,5 待验证序列 3,2,1,5,4 待验证序列 5,3,4,2,11/29/202312采用不同的数据结构#include#include#include/栈方式:#include/向量方式:#includeusing namespace std;1/29/202
8、313栈方式/=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()!=co
9、ach)break;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);/=模仿栈操作1/29/
10、202315结论n不同的数据结构有不同的操作和性能n应学习使用不同数据结构的经验1/29/2023163.算法算法(Algorithms)揭示:确定了数据结构之后,所采用的算法将直接决定程序的性能;任何语言都有个性,算法的选择使用是灵巧运用语言的艺术,充分发挥语言的优势是活用算法的根本做法:培养经验,用测试的办法对算法进行选择1/29/202317问题:已知不太大的正整数n(n46),求Fibonacci数列 0 1 1 2 3 5 8 13 21 34 的第n项的值对于后面的四种算法:unsigned fibo1(unsigned n);unsigned fibo2(unsigned n);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 教程 精品

限制150内