《算法笔记》零碎笔记

一、前提说明
       笔者刚开始接触CCF,在看过一些大牛博客后,开始了学习之旅,该篇博客将记录本人在学习相关资料时一些零碎知识,以供以后的学习避免出现相似问题,同时贴出也为分享给有共同想法的博友进行参考,该篇博客会不定时更新,如有博友有补充可留言讨论。

二、知识笔记(C及C++)

1.定义较大数组(大概是10^6级别)时,需将其定义在主函数外,做全局变量,原因是函数内部申请的局部变量来自系统栈,允许申请空间较小,而函数外部申请的全局变量来自静态存储区,允许申请空间较大。
2.C的scanf()与printf()比C++中的cin和cout所消耗时间少得多;一个程序中使用cout和printf有时候会出现问题。
3.给一个数组中所有元素赋相同值有两种函数,memset和fill。

  •    memset需要函数头string.h;而fill在STL的algorithm头文件中。
  •    使用memset函数赋0或-1,因为该函数按字节赋值(对每个字节赋同样的值,而0,-1的二进制补码分别均为0和1)不易出         错;若要对数组赋其他值,用fill函数。
  •    memset执行速度更快

4.在scanf完后,若要使用gets,应先在scanf后使用一次getchar接受换行符,再使用gets。因为gets识别换行符\n作为结束符。
5.数组做参数时,在函数中对数组元素修改操作就等同于对原数组元素进行修改操作,函数无法返回数组,但可以通过该种方法实现对数组的操作。
6.善用sscanf和sprintf
7.若想要影响原变量,可以通过借助函数的地址传递或借助C++中的引用。(注意:引用中的&并非地址运算符&,无取地址含义)
8.由于计算机采用有限位的二进制编码,因此浮点数在计算机中的存储并不总是精确的,故需引入一个极小数eps进行修正。经验表明eps取10^-8是一个合适的数字,如下使用代码片段,定义在全局中。

9.对于考虑到精度误差的浮点数关系运算符的解决方法(精度误差主要发生在浮点数比较)

#include<math.h>
const double eps =le-8;  //误差控制
const double Pi=acos(-1.0);  //圆周率3.1415926...
#define Equ(a,b) (fabs((a)-(b))<(eps))  //相当于a=b
#define More(a,b) (((a)-(b))>(eps)) //相当于 a>b
#define Less(a,b) (((a)-(b))<(-eps)) //相当于 a<b
#define MoreEqu(a,b) (((a)-(b))>(-eps)) //相当于 a>=b
#define MoreEqu(a,b) (((a)-(b))<(eps)) //相当于 a<=b

10.对于结构体的初始化,可以借助“构造函数”来进行,对于一个普通定义的结构体,其内部会生成一个默认的函数名与结构体名相同的构造函数(但不可见),该构造函数无需返回值。可借助如下代码片段理解。

struct studentInfo{
    int id;
    char gender;
    //默认生成的构造函数,不可见
    studentInfo(){}
};

11.结构体初始化之构造函数法,如下展示代码片段。

struct studentInfo{
    int id;
    char gender;
    //通过重写(java中面向对象的概念),使该构造函数适应多种初始化情况
    studentInfo(){}   
    //只初始化gender
    studentInfo(char _gender)
    {
        gender=_gender;
    }
    //同时初始化gender和id
    studentInfo(int _id ,char _gender)
    {
        id=_id;
        gender=_gender;
    }
};


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值