摘要:
单例(Singleton)模式是所有模式里面最好理解,也是最容掌握的一种模式。一、功能 保证一个类仅有一个实例。 二、结构图三、优缺点 Singleton模式是做为"全局变量"的替代品出现的。所以它具有全局变量的特点:全局可见、贯穿应用程序的整个生命期,它也具有全局变量不具备的性质:同类型的对象实例只可能有一个。四、实现class Singleton{ public: static Singleton* Instance() ; protected: Singleton() {}//无法调用实例,只能指针化 private: static Singleton *instan 阅读全文
摘要:
众所周知,程序为了提高访问效率,编译器在编译的时候,进行字节对齐。程序员也可以字节指定对齐方式。Win32下的为progma指令,具体来说#pragma pack(push) //保存原对齐状态#pragma pack(4)//设定为4字节对齐struct test{ int a;};#pragma pack(pop)//恢复对齐状态在linux下,gcc是默认的编译器。g++ 支持progma指令,gcc也支持GNU扩展__attribute__指令参考《__attribute__》,对于字节对齐的举例为struct test{ short b[3];} __attribute__ ((al 阅读全文
摘要:
编程之美关于求一个整数二进制数一的个数后面的一道思考题。1.A和B两个数,将A变成B,所需要改变的数字个数(二进制数)。异或求出异或值二进制包含的1的个数。 #include <stdio.h> int func(int A, int B) { int M= A ^ B; int num=0; printf("%d\n",M); while(M!=0) { M &= (M-1); num++; } return num; } int main() { int A, B; A=0x10; B=0x11; printf("%d\n", f 阅读全文
摘要:
看到BaiDu的笔试题一道。已知一个字串由GBK汉字和ansi编码的数字字母混合组成,编写C语言函数实现从中去掉所有ansi编码的的数字和字母(包括大小写),要求在原字串上返回结果。函数接口为:int filter_ansi(char* gbk_string)。注:汉字的GBK编码范围是 0x8140 - 0xFEFE。其实这题的思想与 在字符串中删除特定的字符 类似,事实上还要简单,因为没有过滤规则(参考博文后一个参数可以看成是过滤规则)。汉字编码常用的有GBK和GB2312,一般用双字表示,为了区分ansi编码,其最高位一般为1。下面写成代码如下#include <stdio.h&g 阅读全文
摘要:
听讨论的时候,遇到一题是关于++i*++i的——这样的讨论意义不大,却也可以一窥编译器对相关问题的处理。原题如下相关代码说明如下#include <stdio.h>#define POWER(X) X*Xint main(){ int ch = 8; int sum = POWER(ch++); sum = POWER(++ch); return 0;}如果添加printf输出,其第一个sum = 64,第二个sum = 144将上面的进行汇编编译得到。gcc -S test.c程序main的主要汇编代码main: pushl %ebp movl %esp, %ebp subl $ 阅读全文
摘要:
Notepad果真是程序员必备啊。有兴趣的同学也可以关注下PSPad,提供Project管理功能,对编辑网页(js)等有更好的支持(暂时用不到)。《免费文本编辑器–PSPad功能介绍及评测》以下内容转载自http://www.codecho.com/notepad-change-or-self-make-theme/新版的notepad++都支持更换主题,方法很简单:菜单上的“设置–语言格式设置,就可以选择不同的主题了。若是觉得这些主题不满意,你还可以自己定制更多主题,使用的是TextMate——The Missing Editor for Mac OS X,这个里面有很多漂亮的主题,不过格式 阅读全文
摘要:
Print an integer using only putchar. Try doing it without using extra storage.1)void printInt(int a){ int b = a; char *str; int i = 1; int len = 0; while (b) { b /= 10; i *= 10; len++; } i /= 10; while (i > 0) { putchar(a/i + 48); a = a%i; i /= 10; }} 2)Thiscanbedonebyrecursion.Sincethenumberofre 阅读全文
摘要:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。在官方主页(中文)上有个简单的介绍(图比较形象),jsoncpp是一个c++封装的json包,跨平台支持windows、linux、unix等多系统。官方提供的编译需要使用到scons(一个基于python语言编写的编译工具,类似于autoconfig等工具),0.5版本的需要python2.6的支持——坑爹啊。反正有源码包,就自己改了个Makefile,编译生成了静态链接库libjsoncpp.a和动态链接库libjsoncpp.so。关于json的教程, 阅读全文
摘要:
更详细的参数说明参考http://www.cplusplus.com/reference/string/string/string 函数列表 函数名描述begin得到指向字符串开头的Iteratorend得到指向字符串结尾的Iteratorrbegin得到指向反向字符串开头的Iteratorrend得到指向反向字符串结尾的Iteratorsize得到字符串的大小length和size函数功能相同max_size字符串可能的最大大小capacity在不重新分配内存的情况下,字符串可能的大小empty判断是否为空operator[]取第几个元素,相当于数组c_str取得C风格的const char 阅读全文
摘要:
百度热词榜单初学TinyXml,盯上了解析百度热词榜单。通过curl获取rss地址上的数据。由于TinyXml不支持,所以要转换为UTF-8格式,命令为iconv -f gb2312 -t utf-8 baidutop.xml > baidutop.xml写得很烂,写的时候,心里对内存管理部分总是瞻前顾后的,真是奇怪啊。View Code #include <iostream> #include <tinyxml/tinyxml.h>#include <tinyxml/tinystr.h> #include <vector>using na 阅读全文