07 2012 档案
摘要:C语言中一般使用#define来定义常量,而C++中推荐使用const。因为#define定义的常量只是定义了名字和值的映射,存储在符号表中,在预处理阶段进行名值替换,不会进行类型检查操作。而const会进行类型检查。c++中const默认是内部链接的,也就说,const仅在const被定义过的文件里才是可见的,而在链接中不能被其他编译单元看到。这是因为const默认也是放到符号表中的,不会为其分配内存空间。但也有例外:当使用extern和取const变量的地址时,会强制为其分配内存空间。e.g. extern const int size=10; 或 const int size=10; c
阅读全文
摘要:假设以年利率r%投资一笔钱y年,金融版本的“72法则”指出,如果r*y=72,那么你的投资差不多会翻倍。Little定律指出“系统中物体的平均数量等于物体离开系统的平均速率和每个物体在系统中停留的平均时间的乘积。(并且如果物体离开和进入系统的总体出入流是平衡的,那么离开速率也就是进入速率。)”假设你正在排队等待进入一个火爆的夜总会,你可以通过估计人们进入的速率来了解自己还要等待多长时间。依据Little定律,你可以推论:“这个地方可以容纳约60人,每个人在里面逗留的时间大约是3小时,因此我们进入夜总会的速率大概是每小时20人。现在队伍中我们前面还有20人,这也就意味着我们还需要等待大约一个小时
阅读全文
摘要:文件是对I/O的抽象,虚拟存储器是对程序存储器的抽象,进程是对一个正在运行的程序的抽象,虚拟机是对整个计算机的抽象。并发和并行的区别就是一个处理器同时处理多个任务和多个处理器同时处理多个不同的任务的区别。并发指的是逻辑上同时发生,而并行是物理上同时发生。并发性指的是处理多个同时性活动的能力,并发事件之间不一定要同一时刻发生。并行是指同时发生的两个事件,并发不一定并行。当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式地将有符号参数强制类型转换为无符号数,并假设这两个数都是非负的来执行这个运算。e.g. -1 < 0U => false.扩展一个数的位
阅读全文
摘要:show privileges 显示可用的系统权限清单。 View Code mysql> show privileges;+-------------------------+---------------------------------------+-------------------------------------------------------+| Privilege | Context | Comment ...
阅读全文
摘要:在变量定义前加extern表示声明一个变量但不定义它,例如:extern int a;extern 也可用于函数声明。例如:extern int func(int, int);但对于函数声明extern不是必须的。对变量和函数进行声明后就可以使用别人的函数了,但是大部分的库包含众多的函数和变量。要使用多个,自己声明起来既麻烦也容易出错,这时可以使用包含头文件的方法。头文件是一个包含某个库的外部声明函数和变量的文件,其中已经包含了函数和变量的声明信息。因而,用户只需使用预处理指令#include包含由创建库的程序员提供的头文件就可以了。static member function 的主要特性就是
阅读全文
摘要:辗转相除法int gcd1(int x,int y){ if(y==0) return x; else return gcd1(y,x%y);}但是取模运算的开销很大,可以考虑使用x-y替代,因为x,y,x-y一定具有相同的最大公约数。int gcd2(int x,int y){ if(x<y) return gcd2(y,x); if(y==0) return x; else return gcd2(y,x-y);}编程之美2.7节又提供了两种方法结合。gcd(x,y)=gcd(p*x1,y)...
阅读全文
摘要://输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.//n=10, m=9output:/*9 18 27 37 2 16 46 3 15 4 15 3 24 3 2 1*/vector<int> factors; 1 void findFactor2(int sum,int n){ 2 if(sum<0||n<0) 3 return ; 4 if(sum==0){ 5 for(vector<int>::iterator iter=factors.begin();i...
阅读全文
摘要:递归生成排列和组合 1 void doPermute(char str[],char result[],bool used[],int length,int level){ 2 if(level==length){ 3 cout<<result<<endl; 4 return; 5 } 6 7 for(int i=0;i<length;i++){ 8 if(!used[i]){ 9 result[level]=str[i];10 used[i]=true;11 ...
阅读全文
摘要:题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。分析:本题就是有名的约瑟夫环问题。既然题目有一个数字圆圈,很自然的想法是我们用一个数据结构来模拟这个圆圈。在常用的数据结构中,我们很容易想到用环形列表。我们可以创建一个总共有m个数字的环形列表,然后每次从这个列表中删除第m个元素。在参考代码中,我们用STL中std::list来模拟这个环形列表。由于list并不是一个环形的结构,因此每次跌代器扫描到列表末
阅读全文
摘要:求二叉树中节点的最大距离...如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。ANSWER:This is interesting... Also recursively, the longest distance between two nodes must be either from root to one leaf, or between two leafs. For the former case, it’s the tree height. For th
阅读全文
摘要:_stdcall在主调用函数中负责压栈,在被调用函数中负责弹出堆栈中的参数,并且负责恢复堆栈。因此不能实现变参函数,参数传递是从右到左。__cdecl在C或C++语言调用中默认的函数修饰_cdecl,由主调用函数进行参数压栈并且恢复堆栈,实参的压栈顺序是从右到左,最后由主调函数进行堆栈恢复。由于主调用函数管理堆栈,所以可以实现变参函数。
阅读全文

浙公网安备 33010602011771号