2012年12月6日

使用reserve函数避免vector和string的内存重新分配

摘要: vector和string内部维护的内存会“自动增长”,以便容纳不断放入其中的元素。调用max_size()可以返回其容量的最大限制。“自动增长”的过程如下:(1)分配一块大小为当前容量的某个倍数的新内存。(2)将元素从旧内存拷贝到新内存。(3)析构旧内存中的对象。(4)释放旧内存。“自动增长”的过程很耗时,并且会导致所有的指针、迭代器和引用失效。所以避免频繁的内存重新分配就显得很重要。使用成员函数reserve()可以避免因“自动增长”而造成的内存重新分配。要尽早的使用reserve,把容量设为足够大。最好在容器刚被构造出来之后就使用reserve。vector<int> v;v 阅读全文

posted @ 2012-12-06 10:28 zhuyf87 阅读(612) 评论(0) 推荐(1) 编辑

2012年12月5日

用vector和string代替new动态分配的数组

摘要: 使用new动态分配数组,需要时时刻刻记住delete,很容易造成memory leak。使用vector和string则消除了这个负担,因为它们有自己的内存管理,在它们的析构函数中会自动释放内存。通常情况下用vector代替动态数组,如果要存储的元素类型是字符类型时使用string。所有适合于序列容器的STL算法,vector和string都可以使用。所以使用vector和string会带来更多的便利。许多string的实现采用了“引用计数”,用于消除不必要的内存分配和不必要的字符拷贝。但这样的实现在多线程环境中,需要注意一下因支持线程安全而导致的性能问题。如果所使用的string以“引用计数 阅读全文

posted @ 2012-12-05 18:32 zhuyf87 阅读(1866) 评论(0) 推荐(0) 编辑

2012年11月26日

你是否有焦虑症?-_-

摘要: 疾病简介焦虑是最常见的一种情绪状态,比如快考试了,如果你觉得自己没复习好,就会紧张担心,这就是焦虑。这时,通常会抓紧时间复习应考,积极去做能减轻焦虑的事情。这种焦虑是一种保护性反应,也称为生理性焦虑。当焦虑的严重程度和客观事件或处境明显不符,或者持续时间过长时,就变成了病理性焦虑,称为焦虑症状,符合相关诊断标准的话,就会诊断为焦虑症,也称为焦虑障碍。发病原因目前病因尚不明确。研究表明,焦虑症与遗传因素、个性特点、不良事件、应激因素、躯体疾病等均有关系,这些因素会导致机体神经-内分泌系统出现紊乱,神经递质失衡,从而造成焦虑等症状的出现。焦虑症患者往往会有5-HT(5-羟色胺),NE(去甲肾上腺素 阅读全文

posted @ 2012-11-26 19:11 zhuyf87 阅读(410) 评论(0) 推荐(0) 编辑

2012年11月15日

关于对话框DoModal()函数调用失败的原因分析

摘要: 原文地址:http://www.cnblogs.com/carekee/articles/1749365.html对话框DoModal()函数调用失败一般而言有两种表现形式:一是对话框弹不出来,但是没有错误提示;二是对话框弹不出来,同时伴随内存访问错误的提示框出现。第一种表现主要是因为没有对资源句柄进行切换造成的,以在DLL中弹出对话框中最为常见。解决办法是:如果是MFC规则DLL,可以使用所有导出函数的开始处添加 AFX_MANAGE_STATE宏,具体代码为:AFX_MANAGE_STATE(AfxGetStaticModuleState( ))。如果是MFC扩展DLL,具体做法是:1. 阅读全文

posted @ 2012-11-15 10:42 zhuyf87 阅读(3018) 评论(0) 推荐(0) 编辑

CDialog_DoModal返回-1,无法创建Dialog

摘要: CDialog::DoModalReturn Value:An int value that specifies the value of the nResult parameter that was passed to the CDialog::EndDialog member function, which is used to close the dialog box. The return value is –1 if the function could not create the dialog box, or IDABORT if some other error occurre 阅读全文

posted @ 2012-11-15 10:34 zhuyf87 阅读(896) 评论(0) 推荐(0) 编辑

2012年11月13日

一步一步写平衡二叉树(AVL树)

摘要: 原文地址:http://www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态。这个方案很好的解决了二叉查找树退化成链表的问题,把插入、查找、删除的时间复 阅读全文

posted @ 2012-11-13 23:17 zhuyf87 阅读(5733) 评论(1) 推荐(1) 编辑

2012年11月12日

AVL树

摘要: AVL(Adelson-Velskii and Landis)树是带有平衡条件(balance condition)的二叉查找树。这个平衡条件必须容易保持,而且必须保证树的深度是O(logN)。AVL树规定其每个结点的左子树和右子树的高度最多差1。如下图,左边的树是AVL树,右边的则不是。AVL树的每个结点(在其结点结构中)保留高度信息。可以证明,一般情况下,一棵AVL树的高度最多为1.44log(N+2) – 1.328,并且实际上的高度只比logN稍微多一点。下图显示了一棵具有最少结点(143)高度为9的AVL树。这棵树的左子树是高度为7且结点数最少的AVL树,右子树是高度为8且结点数最少 阅读全文

posted @ 2012-11-12 22:22 zhuyf87 阅读(4218) 评论(0) 推荐(1) 编辑

Windows Mobile 消除安装程序时显示“此程序来自未知发行者…“提示的方法

摘要: 修改注册表HKey_Local_Machine\Security\Policies\Policies\0000101a = 11为取消提示,0为认证提示。 阅读全文

posted @ 2012-11-12 11:02 zhuyf87 阅读(447) 评论(0) 推荐(0) 编辑

2012年11月9日

二叉排序树

摘要: 二叉排序树又称“二叉查找树”、“二叉搜索树”。二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树:1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;3. 它的左、右子树也分别为二叉排序树。二叉排序树通常采用二叉链表作为存储结构。中序遍历二叉排序树可得到一个依据关键字的有序序列,一个无序序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程即是对无序序列进行排序的过程。每次插入的新的结点都是二叉排序树上新的叶子结点,在进行插入操作时,不必移动其它结点,只需改动某个结点的指针,由空变为非空即可。搜索、插 阅读全文

posted @ 2012-11-09 18:12 zhuyf87 阅读(71566) 评论(4) 推荐(6) 编辑

2012年11月8日

我将采用的 C++编码规范(1)——命名约定

摘要: 公司成立不久,暂时没有完备的项目编码规范。自己现在的工作也基本上是独立完成,没有团队合作。所以这里的命名约定作为自己的“单兵装备”,尽量约束自己写出风格统一、清晰易读的代码。本约定几乎完全参考“Google C++ Style”,部分参考“QT”。所采用的命名风格可以直接确定命名实体是:类型、变量、函数、常量、宏等等,而无需查找实体声明。(1)通用命名规则1. 尽可能不使用缩写,即便是那些显而易见的缩写(如:num -> number)。2. 类型和变量名一般为名词,如:FileOpener、number_errors。3. 函数名通常是指令性的,如OpenFile()。(2)文件命名1 阅读全文

posted @ 2012-11-08 18:16 zhuyf87 阅读(880) 评论(0) 推荐(0) 编辑

导航