const限定符、引用、new和delete、内联函数:
1、const限定符
1)const限定符的思想是将一个对象转变成一个常量,比如const int n=4;
用const修饰n以后,n相当于是常量,既然是常量那么必须在最初定义的时候初始化、并且不允许后面用到变量n时对n进行修改,比如赋值
2)比较两种全局作用域定义变量:
<1> int n; //file.cc中定义
extern int n; //file.h中定义
此时n作为全局变量,能够被多个文件访问
想要一起学习C++的可以加裙248-894-430,群内有各种资料满足大家
<2> extern const int n=1; //file.c>中定义
extern const int n; //file.h中定义
与上一个变量定义不同,在file.c文件的声明里,const前也需要extern修饰,原因在于:非const变量默认extern,要使const变量能够被其他文件访问,必须显示的制定它为extern
2、引用
1)int n=1;
int &m=n;
引用只是对已有变量赋予另一个名字,比如m只是变量n的另一个名字,对m执行任何赋值、++、--等运算其实都是作用在n上
3、new、delete
1)int *pi=new int;
//new int:在自由存储区创建一个int型对象,并返回该对象的地址
//用该地址初始化指针pi,进而使得指针指向该对象
2)int *pi=new int(1024);
//由于提供了初值,new表达式分配到所需的内存后,会用该值去初始化该内存空间
3)int *pi=new int;
int *pi=new int();
二者的不同之处在于第二个会用0去初始化分配的内存空间,而第一个语句没有初始化
4)//假设class cls:
cls *ptr=new cls();
对于类类型,系统编译时会自动调用其默认构造函数进行初始化该对象
5)new创建的对象使用完以后,需要用delete释放指针所指向的内存空间
delete pi;
delete删除指针以后,该指针会变成悬垂指针,因此需要重设指针值(置为0)
悬垂指针:指向曾经存放对象但是该对象已经不再存在了的指针
4、内联函数(inline)
1)关键字inline
2)编译器看到inline后,会为该函数创建一段代码(函数内部的代码),之后每次调用该函数时就会用这一段代码去替换
3)inline string function(string s1,string s2){
return s1.size()<s2.size()?s1:s2
}
当调用该函数比如cout<<function(s1,s2)<<endl;的时候;函数编译时会将其替换为:cout<<(s1.size()<s2.size()?s1:s2)<<endl;
4)为什么要这样使用内联函数呢
主要有两个原因:<1>阅读和使用函数比用表达式来取代函数要容易,而且也好修改,只需要修改函数定义的地方,而不必去修改所有用到该表达式的地方
<2>那为什么又要将函数替换成表达式呢?主要是因为函数执行开销比执行一个语句要大
综上:使用函数而不直接使用表达式便于理解和修改,使用内联函数在编译时用表达式替换了函数从而减少了写成函数的开销
看到最后的都不容易T_T,送个彩蛋,哈哈 ^.^
合唱队问题
描述:计算最少出列多少位同学,使得剩下的同学排成合唱队形。说明:N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形(不能移动这些同学的位置)。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足存在i(1<=i<=K)使得T1<T2<......<Ti-1<Ti>Ti+1>......>TK。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形;
输入:整数N
一行整数,空格隔开,N位同学身高;
输出:最少需要几位同学出列;
样例输入:8 186 186 150 200 160 130 197 200;
样例输出:4
明天分享答案~
参考书籍《C++ Primer》
想要一起学习C++的可以加裙248-894-430,群内有各种资料满足大家