钱能C++程序设计教程644页PPT
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.
else
8.
std::cout<<“NonDigit.\n";
9. }//===============================
5
内联方式:开销少,可读性也佳
内联标记 放在函数声 明的前面
4/9/2020
1. //==================================
2. #include<iostream>
inline bool isDigit(char); // 小函数
int main( ){
for(char c; cin>>c && c!='\n'; )
if(isDigit(c))
std::cout<<"Digit.\n";
else
std::cout<<"NonDigit.\n";
}//---------------------------------
9. }//---------------------------------
10. bool isDigit(char ch){
11. return ch>='0' && ch<='9' ? 1 : 0;
12. }//=================================
4
内嵌代码:开销虽少,但可读性差
4/9/2020
1. //================================
2. #include<iostream>
3. int main( ){
4.
for(char c; cin>>c && c!='\n'; )
5.
if(ch>='0' && ch<='9' ? 1 : 0)
6.
std::cout<<“Digit.\n";
13.
z[i] = calc1(x[i%1000], y[i%1000]);
14. cout<<(clock()-t)/CLK_TCK<<“without inline\n";
15. t = clock(); 16. for(int i=0; i<1000*1000*1000; ++i)
内联函数
17.
z[i] = calc2(x[i%1000], y[i%1000]);
18. cout<<(clock()-t)/CLK_TCK<<“with inline\n";
19. }//=====================================
8
4/9/2020
E:\ch06>f0605↙ 8.281 without inline 2.437 with inline
2
1. 内联函数 ( Inline Functions )
4/9/2020
做法:将一些反复被执行的简 单语句序列做成小函数
用法:在函数声明前加上 inline关键字
作用:不损害可读性又能提高 性能
3
频繁调用的函数:用昂贵的开销换取可读性
4/9/2020
1. //==================================
程序中特别是在循环中反复执行该 函数,这样就使嵌入的代码利用率 较高.如:上例中的isDigit函数
程序并不多处出现该函数调用,这 样就使嵌入工作量相对较少,代码 量也不会剧增
7
性能测试
初记时 末记时
4/9/2020
1. //======================================
8. //--------------------------------------
9. int main(){ 10. int x[1000], y[1000], z[1000];
非内联函数
11. clock_t t = clock();
12. for(int i=0; i<1000*1000*1000; ++i)
2. #include<iostream>
3. bool isDigit(char); // 小函数
4. int main( ){
5.
for(char c; cin>>c && c!='\n'; )
6.
if(isDigit(c))
7.
std::cout<<“Digit.\n";
8.
else std::cout<<“NonDigit.\n";
2. #include<iostream>
ห้องสมุดไป่ตู้
3. #include<time>
4. using namespace std;
5. //--------------------------------------
6. int calc1(int a, int b){ return a+b; }
7. inline int calc2(int a, int b){ return a+b; }
结果分析: 内联用与不用差很多
结论: 应尽量将函数改造成可内联性质,
提高性能
9
2. 数据结构 ( Data Structures )
bool isDigit(char ch){
return ch>='0' && ch<='9' ? 1 : 0;
}//=================================
6
4/9/2020
内联函数的使用经验:
函数体适当小,且无循环或开关语句, 这样就使嵌入工作容易进行,不会 破坏原调用主体.如:排序函数不 能内联
4/9/2020
提高性能的意义:
性能对提高编程能力举足轻重
如何提高性能?
以合理使用资源为前提,尽快完成任 务的能力称为效率.效率影响性能, 提高效率就能提高性能
学习目标:
1. 扩展视野,对同一问题的不同要 求,模仿各种编程技巧与空间布局策 略,予以应对.从而对各种不同的问 题,亦能应变自如 2. 掌握测试性能的方法,学会测算 时/空交换的代价,客观评估自身的 编程能力
1
4/9/2020
第六章内容
1. 内联函数 ( Inline Functions ) 2. 数据结构 ( Data Structures ) 3. 算法 ( Algorithms ) 4. 数值计算 ( Numerical Computation ) 5. STL算法 ( STL Algorithms ) 6. 动态内存 ( Dynamic Memory ) 7. 低级编程 ( Lower Programming )