1.每执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。
2.fseek(fp,0,SEEK_END),将文件指针fp定位到文件末尾,ftell(fp),计算当前文件指针fp相对于文件头的距离
3.宏定义是直接替换,#define ADD(a,b) a+b 只是定义了一个操作,并不能当成函数来用,用时直接把ADD(a,b) 部分替换成a+b,直接替换,没有括号 。
4.静态成员是属于类的,不是属于对象的,而this是当前对象的指针,所以静态成员没有this指针。
5. MVC框架是三层架构:模式层、视图层、控制层
模式层:表示企业数据和业务逻辑,是应用程序的主体部分;
视图层:是用户看到的并与之交互的界面;
控制层:接收用户的输入并调用模型和视图去完成用户的需求;
6.虚函数必须是类的成员函数,其中,静态成员函数和构造函数不能定义为虚函数,析构函数可以 。
7.函数缺省参数 只能从右往左缺省
8.
(1) 用’‘对包含的代表字符常量,其值为字符a的ascii码。
(2) 用""对包含的代表字符串常量,其有两个元素,第一个是a,第二个是结束符’\0’。
9.IP地址和路由器 工作在网络层,MAC地址和交换机,网卡,网桥,AP 工作在数据链路层,集线器和网线 工作在物理层。
10.’\n‘是一个字符
11.线程有自己的栈,局部变量存储在栈中。所以局部变量以外的变量都需要设置保护。i和j存储在全局静态区。属于共享资源。要加锁
12.‘\0’ 是 c/c++ 语言中的字符串结束符,在ASCII字符集中对应空字符NULL,数值为0。
13.explicit修饰的构造函数不能隐式调用(Test a = n;)
14.dp复习,全局思维
int CalSum(int left,int right,bool isTurn)
{
if(res[left][right])//如果已存在这个值,那直接使用,这是动态规划的核心思想
return res[left][right];
if(left==right)//如果只剩一个数了
{
if(!isTurn)//如果该玩家取数,直接取走并存入res,待其它递归使用
return res[left][right]=a[left];
else//如果该BOSS取数,那玩家啥也不取(即取0),但要把0存入res待用
return res[left][right]=0;
}
if(!isTurn)//如果该玩家取数,那就取从长远来看的max,而不是取当前的max咯~
return res[left][right]=max(CalSum(left+1,right,!isTurn)+a[left],CalSum(left,right-1,!isTurn)+a[right]);
else//如果该BOSS取数,那玩家不取数,那被BOSS取数后剩下的,肯定是从长远来看的min咯~
return res[left][right]=min(CalSum(left+1,right,!isTurn),CalSum(left,right-1,!isTurn));
}