C++程序设计教程(第二版).ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++程序设计教程(第二版) 第六章 性能 Chapter 6 Performance 提高性能的意义: 性能对提高编程能力举足轻重 如何提高性能?   以合理使用资源为前提,尽快完成任务的能力称为效率.效率影响性能,提高效率就能提高性能 学习目标: 1. 扩展视野,对同一问题的不同要求,模仿各种编程技巧与空间布局策略,予以应对.从而对各种不同的问题,亦能应变自如 2. 掌握测试性能的方法,学会测算时/空交换的代价,客观评估自身的编程能力 第六章内容 1. 内联函数 ( Inline Functions ) 做法:将一些反复被执行的简单语句序列做成小函数 用法:在函数声明前加上inline关键字 作用:不损害可读性又能提高性能 频繁调用的函数:用昂贵的开销换取可读性 内嵌代码:开销虽少,但可读性差 内联函数的使用经验: 函数体适当小,且无循环或开关语句,这样就使嵌入工作容易进行,不会破坏原调用主体.如:排序函数不能内联 程序中特别是在循环中反复执行该函数,这样就使嵌入的代码利用率较高.如:上例中的isDigit函数 程序并不多处出现该函数调用,这样就使嵌入工作量相对较少,代码量也不会剧增 //====================================== #includeiostream #includetime using namespace std; //-------------------------------------- int calc1(int a, int b){ return a+b; } inline int calc2(int a, int b){ return a+b; } //-------------------------------------- int main(){ int x[1000], y[1000], z[1000]; clock_t t = clock(); for(int i=0; i1000*1000*1000; ++i) z[i] = calc1(x[i%1000], y[i%1000]); cout(clock()-t)/CLK_TCK“without inline\n; t = clock(); for(int i=0; i1000*1000*1000; ++i) z[i] = calc2(x[i%1000], y[i%1000]); cout(clock()-t)/CLK_TCK“with inline\n; }//===================================== 结果分析: 内联用与不用差很多 结论: 应尽量将函数改造成可内联性质,提高性能 问题: 有许多序列,每个序列都等待验证是否可从顺序数列经过栈操作而得. 例如:顺序数列 1,2,3,4,5 待验证序列 3,2,1,5,4 待验证序列 5,3,4,2,1 采用不同的数据结构 #includefstream #includeiostream #includesstream // 栈方式: #includestack // 向量方式: #includevector using namespace std; 栈方式 //============================= int main(){ ifstream in(rail.txt); for(int n,line=0; inn n in.ignore(); ){ cout(line++ ? \n:); for(string s; getline(in, s) s!=0; ){ istringstream sin(s); stackint st; for(int last=0,coach; sincoach; st.pop()){ for(int p=last+1; p=coach; ++p) st.push(p); if(lastcoach) last=coach; if(st.top()!=coach) break; } cout(!sin ? Yes\n : No\n); } } }//============================= 向量方式 //==================

文档评论(0)

xiaowei110 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档