摘要: STL的bitset是一个对位进行存储和操作的容器,可以轻松对bit位进行访问.bitset的模板声明如下:templateclassbitset;这里我们要给出需要分配位数.vs2008中bitset内部使用的是一个unsigned long数组来存储数据, 在x86,32位机器中一个unsigned long长度为4个字节,也就是32位.bitset内部实现不复杂,就是对unsigned long数组进行位操作,下面给一个例子,展示bitset用法.输出set操作默认是将所有位置为1, set可以对某一位设置值;reset默认是将所有位置为0, reset还可以将某一位设置为0;flip操 阅读全文
posted @ 2013-10-07 21:16 蒲蜡 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 之所以把这三个容器放在一起,是因为他们都是容器适配器.STL中queue就是我们常用的FIFO队列,实现是一个容器适配器,这种数据结构在网络中经常使用.queue的模板声明:template >classqueue;这里第二个参数不再是一个内存分配器,而是一个容器,也就是这里我们可以传递一个deque, list, vector等容器,只要这个容器支持queue中调用的借口.因此queue只负责统一调用接口.queue的成员函数很简单,成员函数也只是对我们设置的容器进行调用,因此不多列举.STL中priority_queue也是一个容器适配器,故名思意它是一个带优先级的队列.priori 阅读全文
posted @ 2013-10-07 21:13 蒲蜡 阅读(485) 评论(0) 推荐(0) 编辑
摘要: STL中deque是我们常说的双端队列,既可以从头添加元素,也可以从尾部添加元素,deque的成员函数和vector的成员函数十分相似,但是它们的内部实现却又很多不同.deque的模板声明:template >classdeque;1)deque的内存分配方式,deque的内存管理方式比vector复杂.上面程序在执行完最后的push_back后内存分布如下图:追踪push_back函数我们看到:我们先看几个变量的含义, _Myoff成员变量始终表示队头距离存储空间开始位置的元素个数, _DEQUESIZ宏定义如下,可以看到为了避免太小内存块,_DEQUESIZ会根据我们定义类型大小来确 阅读全文
posted @ 2013-10-07 21:12 蒲蜡 阅读(1697) 评论(0) 推荐(0) 编辑
摘要: STL中list和我们传统意义上的链表一样可以进行动态节点添加和释放.优点:适合动态删除和添加缺点:不支持随机访问.C++标准对list模板声明:template >classlist;1)list的构造有多种方式和vector差不多,如下:listfirst;listsecond(4,100);listthird(second.begin(),second.end());listfourth(third);intmyints[] = {16,2,77,29};listfifth(myints,myints+sizeof(myints) /sizeof(int) );2)list的内存分 阅读全文
posted @ 2013-10-07 21:06 蒲蜡 阅读(396) 评论(0) 推荐(0) 编辑
摘要: STL中vector是通常作为数组使用,不过它更像一个动态数组,在实际项目开发中大量使用.优点:存储空间连续,可以使用下标访问,时间复杂度O(1).缺点:不适合从中间删除和添加元素.C++标准规定的vector模板声明:template > class vector;T : 存储的数据类型Allocator : 存储空间分配器(默认为std::allocator)1)首先vector可以作为数组使用,因此我们可以在初始化vector时,指定元素个数和初始值.vector v; //v中含有0个元素vector v(5); //v中含有5个元素vector v(5, 1); //v中含有5 阅读全文
posted @ 2013-10-07 21:04 蒲蜡 阅读(667) 评论(0) 推荐(0) 编辑
摘要: 第一章.温故而知新最近电脑出了点故障,到电脑城维修,说是桥芯片坏了,刚好看到本书中关于计算机体系结构介绍北桥芯片是为了协调CPU,内存和高速图形设备之间的访问,速度非常快,而南桥芯片主要负责处理外鼠标,键盘,打印机等低速设备,并汇总到北桥芯片中.第二章程序从源文件到可执行文件:预处理替换和去除预处理指令如:#define, #if #endif等, 编译进行词法分析语法分析语义分析生成目标文件(linux *.o文件, windows *.obj文件),最后将目标文件链接生成可执行文件.windows下的PE文件格式和linux下的ELF文件格式都是在COFF基础上生成的,将文件分为几个段如代 阅读全文
posted @ 2013-09-21 18:06 蒲蜡 阅读(344) 评论(0) 推荐(0) 编辑
摘要: state模式与strategy模式异同:state模式和strategy模式都是环境和具体实现分离,在具体条件下进行不同操作,可以减少switch和if...else等语句带来后期维护的复杂度.state模式:正如名字它包含了一个个体所表现的所有状态,而这些状态与个体分离,一个个体可以可以再这些状态间进行切换.strategy模式:个体只包含一种策略,也就是在一个环境下只选择一个具体的策略.class context class state 1 class state 2 class state 3 call state 1 call state 2 call state 3... 阅读全文
posted @ 2013-09-21 18:05 蒲蜡 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 最近看书介绍rundll32可以加载dll文件并执行其中导出函数,在MSDN中我们可以看到绍http://support.microsoft.com/kb/164787/zh-cnrundll32调用的函数要有特定的格式如下图:hwnd - 窗口句柄,它应该用作 DLL 创建的任何窗口的所有者窗口hinst - DLL的实例句柄pszCmdLine - DLL应分析的字符串lnCmdShow - 描述DLL的窗口应如何显示我们可以看到有的脚本中直接用rundll32.exe直接调用dll执行一些命令,我们也可以自己写一个dll进行测试#include_declspec(dllexport)vo 阅读全文
posted @ 2013-08-29 22:39 蒲蜡 阅读(484) 评论(0) 推荐(0) 编辑
摘要: 1.转型其实是一种编译器指令, 大部分情况下它并不改变一个指针所含的真正地址,它只影响"被指出之内存的大小和内容"的解释方式.2.Global objects的内存保证会在程序启动的时候被清为0, Local objects配置于程序的堆栈中, Heap objects配置于自由空间中, 都不一定会被清为0, 它们的内容将是内存上次被使用后的遗迹.eg.classtest{inta;intb;intc;};testg_obj;voidmain(){testl_obj;test*h_obj=newtest();}对象g_obj中变量均被初始化为0, l_obj和h_obj中变 阅读全文
posted @ 2013-08-18 21:18 蒲蜡 阅读(416) 评论(0) 推荐(0) 编辑
摘要: Lua设计小巧很容易与C/C++进行交互,下面我们具体讲解C/C++中如何调用lua,而lua中又如何调用C代码.首先lua和C交互的一个重要的数据结构lua_State,它是进行数据交换的堆栈,按照严格的LIFO规则(后进先出,始终存取栈顶),lua提供了一些函数来压栈例如:void (lua_pushnil) (lua_State*L);void (lua_pushnumber) (lua_State*L,lua_Numbern);void (lua_pushinteger) (lua_State*L,lua_Integern);void (lua_pushlstring) (lua_St 阅读全文
posted @ 2013-07-27 21:58 蒲蜡 阅读(1180) 评论(1) 推荐(0) 编辑