上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 60 下一页

2012年2月26日

摘要: 这里列几个常见问题,应该对你理解和使用hash_map比较有帮助。4.1 hash_map和map的区别在哪里?构造函数:hash_map需要hash函数、等于函数;map只需要比较函数(小于函数).存储结构:hash_map采用hash表存储,map一般采用红黑树(RB Tree)实现。因此其内存数据结构是不一样的。4.2 什么时候需要用hash_map,什么时候需要用map?总体来说,hash_map 查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级;而map的查找速度是log(n)级。并不一定常数就比log(n) 小,hash还有hash函数的耗时,明白了吧,如果你考虑 阅读全文
posted @ 2012-02-26 20:42 Hibernate4 阅读(343) 评论(0) 推荐(0) 编辑

2012年2月24日

摘要: 一.问题的引出:容器可以存放对象,可以存放指针,这里要谈的是两者的使用问题。就是什么时候存放对象更好,什么时候存放指针更好?二.问题的分析过程:1.首先说下stl容器的工作方式对于内建类型(int float char等),容器的工作方式是纯粹的位拷贝,这里没有什么需要多说的。对于自定义的对象,容器容纳了对象(比如通过insert或push_back等),但容器中存放的对象不是你给它们的那个对象,因为两个对象在内存中的位置不一样。此外,当你从容器中获取一个对象时,你所得到的对象不是容器里的那个对象。取而代之的是,当你向容器中添加一个对象(比如通过insert或push_back等),进入容器的 阅读全文
posted @ 2012-02-24 16:09 Hibernate4 阅读(507) 评论(0) 推荐(0) 编辑
摘要: bimap是boost中很重要的一个容器,可以进行双向的查找和替换,这样弥补了如果map和multimap需要找到data所对应的键值。循环遍历元素,才能找到相应的键值,再删除,最后替换的不足。但是boost的模板源编程又有着先天的缺点,就是编译错误不容易找到,编译时间有点长。但是如果长期使用boost,知道常见的错误,这个缺点还是可以慢慢克服的;虽然编译时间是有点长,但是比起自己一行一行自己写,还是说的过去的。下面是需要的一些头,如果只是简单使用bimap,仅引入#include就可以了#include <iostream> #include <map> #inclu 阅读全文
posted @ 2012-02-24 14:50 Hibernate4 阅读(1744) 评论(0) 推荐(0) 编辑
摘要: 这几天对到底选用哪个容器,用哪种形式的find函数有一些迷惑的地方。工作之后,花些时间对这些常用的东西做一个总结,方便以后翻阅所用。1.通用std::find 函数例子1:// find example #include <iostream> #include <algorithm> #include <vector> usingnamespacestd; intmain () { intmyints[] = { 10, 20, 30 ,40 }; int* p; // pointer to array element: p = find(myints,my 阅读全文
posted @ 2012-02-24 14:46 Hibernate4 阅读(3604) 评论(0) 推荐(3) 编辑

2012年2月23日

摘要: 首先纠正国人的错误翻译,Responsibility 虽然字典里翻译为职责,然而确是由Response派生出来的词,结合此模式的原意,故此处应该翻译为响应更合适,或者说,垃圾字典里至少也应添加"响应"作为另一中文词.软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。 响应链模式:使多个对象 阅读全文
posted @ 2012-02-23 11:28 Hibernate4 阅读(1285) 评论(0) 推荐(0) 编辑
摘要: 作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟悉。问题是, 你封装的这些库, 在给别人使用的时候, 别人用起来是否很方便, 跨平台方面是不是也很通用, 性能是不是足够的好, 是不是支持多线程, 功能是不是也足够强大,可以适用于各种不同的需求。如果你上 阅读全文
posted @ 2012-02-23 10:30 Hibernate4 阅读(536) 评论(4) 推荐(0) 编辑
摘要: Windows提供了多组支持多线程的应用程序接口(API)函数。许多读者已经对Windows提供的多线程函数有一定程度的了解,但是对于那些不熟悉这些的读者,本章提供了这些函数的概述。记住,Windows提供了许多其他的基于多线程的函数,这些函数需要您自己去探索。为了使用Windows的多线程函数,必须在程序中包含<Windows.h>。3.4.1 线程的创建和终止Windows API提供了CreateThread()函数来创建一个线程。其原型如下所示:HANDLE CreateThread(LPSECURITY_ATTRIBUTES secAttr,SIZE_T stackSiz 阅读全文
posted @ 2012-02-23 10:24 Hibernate4 阅读(1082) 评论(0) 推荐(0) 编辑

2012年2月22日

摘要: 单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个方面的作用:第一、控制资源的使用,通过线程同步来控制资源的并发访问;第二、控制实例产生的数量,达到节约资源的目的。第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。比如,数据库连接池的设计一般采用单例模式,数据库连接是一种数据库资源。软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的。当然,使用数据库连接池还有很多其它的好处,可以屏蔽不同数据数据库之间的差异,实现系统对数据库的低度耦合,也可以被 阅读全文
posted @ 2012-02-22 22:31 Hibernate4 阅读(605) 评论(0) 推荐(0) 编辑
摘要: 1、 将 Invalidate()替换为 InvalidateRect() Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而 InvalidateRect()仅仅重画 Rect 区域内的内容,所以所需时间会少一些。虫虫以前很懒,经常为一小块区域的重画就调用 Invalidate(),不愿意自己去计算需要重画的 Rect,但是事实是,如果你确实需要改善闪烁的情况,计算一个 Rect 所用的时间比起重画那些不需要重画的内容所需要的时间要少得多。2、 禁止系统擦除你的窗口 系统在需要重画窗口的时候会帮你用指定的背景色来擦除窗口。可是,也许需要重画的区域也许非常小。或者,在... 阅读全文
posted @ 2012-02-22 14:40 Hibernate4 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 掌握C++对象模型底层知识的人都知道,C++利用虚函数的机制来实现运行期的多态。例如一个类申明如下:classA{public:A(){}~A(){}virtualvoidf1(){printf("Founctionf1called\n");}virtualvoidf2(){printf("Founctionf2called\n");}virtualvoidf3(){printf("Founctionf3called\n");}private:intn;};复制代码那么A对象在内存中的结构图大概如下: (缺失)如上图:可以看到A对象的 阅读全文
posted @ 2012-02-22 14:35 Hibernate4 阅读(271) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 60 下一页

导航