C++
tripleTu
这个作者很懒,什么都没留下…
展开
-
C++的64位整数
在做ACM题时,经常都会遇到一些比较大的整数。而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647。而unsigned范围是[0,2^32),即0~4294967295。也就是说,常规的32位整数只能够处理40亿以下的数。 那遇到比40亿要大的数怎么办呢?这时就要用到C++的64位扩展了。不同的编译器对6转载 2013-07-17 09:57:11 · 300 阅读 · 0 评论 -
关于二维数组传参做形参
二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写?要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型。正确的是:void Func(int array[3][10]); void Func(int array[][10]);可以省略第一维的大小错误的是void Func(int array[][].转载 2013-11-06 15:53:26 · 361 阅读 · 0 评论 -
在字符串中找第一个出现一次的字符
#include #include #include using namespace std;char findFirstOnce(char* a){ if(!a) return 'N'; int length=0,offset=0; int* num = (int*) malloc(26*sizeof(int)); memset(num,0,26*sizeof(int));原创 2013-11-06 09:41:44 · 474 阅读 · 0 评论 -
c char&int
1,char型数字转换为int型char a[] = "32";printf("%d\n", a[0]-'0');//输出结果为3C语言 单引号和双引号的区别1、含义不同。用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。而一般我们的编译器采用的都是ASCII字符集。因此's'的含义其实和十进制数115的含义是一致的。而原创 2013-11-06 09:45:42 · 416 阅读 · 0 评论 -
C++ Virtual详解
Virtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向派生类Derived的对象时,对point的print函数的调用实际上是调用了Derived的print函数而不是Ba转载 2013-11-01 11:38:45 · 368 阅读 · 0 评论 -
左移字符串
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。(1)递归方法原创 2013-10-18 16:21:25 · 718 阅读 · 0 评论 -
struct结构体内的对齐问题
truct结构体由于包含了不同的数据类型,而数据结构类型之间存在占用空间大小的问题,比如char型占用1字节,short int占用2字节,int、long int、指针、float占用4字节、double占用8字节(windows和linux中)。但计算机系统对基本数据类型可能允许地址做出了限制,要求某种类型的对象必须是2、4或8的倍数(为了简化处理器和存储系统之间的硬件设计——可以节省至少1根转载 2013-07-16 10:56:29 · 346 阅读 · 0 评论 -
单链表逆置
经过自己研究,对于单链表的逆序有了一定的了解,记录下来供以后自己查阅1.无头单链表逆序pNode* reverse_nohead(pNode* p){if(p == NULL||p->next == NULL)return p;Node*ph = reverse_nohead(p->next);p->next->next = p;p->next原创 2013-07-22 10:51:35 · 325 阅读 · 0 评论 -
常量指针和指针常量
int a;int * const p = &a //指针常量,*p可以修改*p = 8;(OK) p不可以修改 p++(ERROR)int a,b;const int *p = &a;//常量指针 *p不可修改 *p = 8;(ERROR)转载 2013-08-28 16:37:35 · 247 阅读 · 0 评论 -
局部变量、全局变量、堆、堆栈、静态和全局(二)
7 存取效率的比较char s1[] = "aaaaaaaaaaaaaaa"; char *s2 = "bbbbbbbbbbbbbbbbb"; aaaaaaaaaaa是在运行时刻赋值的; 而bbbbbbbbbbb是在编译时就确定的; 但是,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。 比如: #include void main() { char转载 2013-07-19 15:33:22 · 333 阅读 · 0 评论 -
统计从1到N中1的数目
通过对于N的每一位n进行分析,发现规律(1) n > 1 (高位+1) * 位数 例如 21200 在百位上出现1的次数 为 (21+1) * 100 100-199 , 1100- 1199 , ... , 21100-21199 (此处只考虑百位上出现1的次数,下同) (2) n = 1 高位 * 位数 + 低位 + 1 例如 21111 在百位原创 2013-07-19 15:23:23 · 344 阅读 · 0 评论 -
二进制中1的个数
这种方法速度比较快,其运算次数与输入n的大小无关,只与n中1的个数有关。如果n的二进制表示中有k个1,那么这个方法只需要循环k次即可。其原理是不断清除n的二进制表示中最右边的1或者最左边的1,同时累加计数器,直至n为0如7(0111)通过与 7-1 (0110)与操作消去最最左边的1,并累加计数器7(0111)& 7-1 (0110) = 6 (0110)再将 6 (0110) 与原创 2013-07-19 10:38:31 · 288 阅读 · 0 评论 -
局部变量、全局变量、堆、堆栈、静态和全局
预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 全局区(静态区)(static)—,全局变量和转载 2013-07-19 15:30:58 · 271 阅读 · 0 评论 -
生产者和消费者模型
基本的思路: 这个问题相当于是生产者和消费者模型的问题 首先定义两个线程,一个是下载线程,一个是存储线程,下载线程将数据从网络上下载到相应的数据的缓冲区中(BLOCK组成的队列)。存储的线程从数据缓冲区中读取相应的数据,并将其写到相应的磁盘上去。 多线程同步的方式有:CriticalSection、Mutex和Semaphore(信号量)。因为CriticalSection和Mu转载 2013-07-17 15:37:40 · 312 阅读 · 0 评论 -
01背包问题
基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}当前的最优解=Max((当前容量)不放入当前物品的最大值,(当前容量-当前物品容量)情况下的最大值+当前物品价值原创 2013-11-06 16:29:19 · 307 阅读 · 0 评论