小知识 (1)

本文是博主才知道的小知识(我太菜了,各位大佬别嘲讽)。//博主以后的容易忘的小知识函数都会写在这,不断更新(由于太多了,所以博主将会发布博文小知识(2) )

1.
在scanf和cin输入中
,如果用getchar()去读取换行字符,scanf能行,但是cin需要借助**cin.peek()!=’\n’**来判断换行的存在。

2.
floor函数(向下取整函数)

floor(2.3) = 2;输出一个不大于传入元素的最大整数;
ceil(2.3) = 3;输出一个大于传入元素的最小整数。

3.
截断l的俩位小数以后的小数
,使其后面的不能四舍五入,从而保持精度,在切绳子题中得知

char s[100];
    sprintf(s+1,"%.3f",l);
    s[strlen(s+1)]='\0';
    printf("%s",s+1);

4.
求最大公因数函数
**__gcd(int a,int b)**求a,b的最大公因数,

5.
位运算符

1<<j == 2^j, a >> 1。除以二(左移与右移)。

6.
abs是表示对整数求取绝对值。fabs是对精度较高的浮点数

7.
isdigit() 函数是字符串的一个方法,用来判断这个字符串是否是纯数字的字符串(返回的是bool类型)

8.
memset函数对字符串(还有bool类型)可以任意的赋值(因为char的字节为1)
而int类型的函数赋值只能赋值为0或者-1,其他的赋值会导致乱码。
而fill函数则都可以赋值,因为其是按单元赋值,也就是一个int字节单元赋值且感觉上还更方便。
fill(arr,arr+n,num)//n为数组大小,arr数组名,num要赋的值。

9.
结构体内镶比较函数
struct node
{
int l,r;
bool operator <(const node &a)const
{
return r < a.r;

}
}a[maxn];

10.
任意大于1的整数的最小的大于1的因数为素数

11
exit 0:正常运行程序并退出程序;

exit 1:非正常运行导致退出程序;

exit 0 可以告知你的程序的使用者:你的程序是正常结束的。如果 exit 非 0 值,那么你的程序的使用者通常会认为
你的程序产生了一个错误。

12.
慎用内联函数inline

内联能提高函数的执行效率,为什么不把所有的函数都定义成内联函数?如果所有的函数都是内联函数,还用得着“内联”这个关键字吗?内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。

以下情况不宜使用内联:

(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。

(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。类的构造函数和析构函数容易让人误解成使用内联更有效。要当心构造函数和析构函数可能会隐藏一些行为,如“偷偷地”执行了基类或成员对象的构造函数和析构函数。所以不要随便地将构造函数和析构函数的定义体放在类声明中。一个好的编译器将会根据函数的定义体,自动地取消不值得的内联(这进一步说明了 inline 不应该出现在函数的声明中)。

注意点:

内联函数既能够去除函数调用所带来的效率负担又能够保留一般函数的优点。然而,内联函数并不是万能药,在一些情况下,它甚至能够降低程序的性能。因此在使用的时候应该慎重。
  1. 我们先来看看内联函数给我们带来的好处:从一个用户的角度来看,内联函数看起来和普通函数一样, 它可以有参数和返回值,也可以有自己的作用域,然而它却不会引入一般函数调用所带来的负担。另外, 它可以比宏更安全更容易调试。
   当然有一点应该意识到,inline specifier仅仅是对编译器的建议,编译器有权利忽略这个建议。那么编译器是如何决定函数内联与否呢?一般情况下关键性因素包括函数体的大小,是否有局部对象被声明,函数的复杂性等等。
  2.那么如果一个函数被声明为inline但是却没有被内联将会发生什么呢?理论上,当编译器拒绝内联一个 函数的时候,那个函数会像普通函数一样被对待,但是还会出现一些其他的问题。

13
bool数组所占字节为1字节,所以和字符数组一样,在一般情况下比int数组开得大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值