自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

转载 哈希表

最近我在做一个项目,其中要用到一个数据结构——Hash Table(哈希表),以前只有理论知识,现在实却发现很不简单,所以写下来和大家共分享。我们知道,哈希表是一个固定大小的数组,数组的每个元素是一个链表(单向或双向)的头指针。如果Key一样,则在一起,如果Key不一样,则不在一起。哈希表的查询是飞快的。因为它不需要从头搜索,它利用Key的“哈希算法”直接定位,查找非常快,各种数据库中的数

2014-02-28 15:44:37 393

转载 Robberies

RobberiesTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4852    Accepted Submission(s): 1844Problem DescriptionThe aspiring

2014-02-25 19:55:18 420

转载 回溯法

如果上期的“百钱买百鸡”中鸡的种类数是变化的,用枚举法就无能为力了,这里介绍另一种算法——回溯法。    回溯法是一种既带有系统性又带有跳跃性的搜索法,它的基本思想是:在搜索过程中,当探索到某一步时,发现原先的选择达不到目标,就退回到上一步重新选择。它主要用来解决一些要经过许多步骤才能完成的,而每个步骤都有若干种可能的分支,为了完成这一过程,需要遵守某些规则,但这些规则又无法用数学公式来描

2014-02-23 21:40:12 372

转载 最好使用C++转型操作符

来源:http://www.cnblogs.com/hazir/archive/2012/04/14/2447251.html旧式的C转型方式,几乎允许你将任何类型转换为任何其它类型,有其自身的缺陷,表现在以下两方面:不能更精确地指明其转型的意图。如将一个pointer-to-base-class-object 转型为一个pointer-to-derived

2014-02-20 22:32:51 385

原创 Effective C++读书笔记(16)

条款25:考虑写出一个不抛出异常的swap函数swap函数是异常安全性编程的脊柱,以及用来处理自我赋值可能性的一个常见机制。缺省情况下,swap动作可由标准程序库提供的swap算法完成。(对象需要支持copying函数)namespace std{template void swap(T& a, T& b){ T temp(a); a = b;

2014-02-20 21:36:00 403

转载 Argument Dependent Lookup (ADL, a.k.a. Koenig Lookup) 解析

来源:http://hi.baidu.com/lovelink/item/cc6ca9e0183224accf2d4facADL,参数相关查找,也称作为Koenig查找(以Andrew Koenig的名字命名,有兴趣可以看Scott Meyer的文章The Most Important C++ People...Ever),是指在编译器对无限定域的函数调用进行名字查找时,所应用

2014-02-20 20:59:37 483

原创 Effective C++读书笔记(15)

条款23:宁以non-member、non-friend替换member函数对类里面的便利函数(不是完成某一特定功能,只是通过调用其他方法整合方法)在既可以选择成为member函数和non-member、non-friend函数的时候一般定义为non-member、non-friend函数更合理。因为member函数比non-member、non-friend函数的封装性差(因为member函

2014-02-18 20:12:21 516

原创 Effective C++读书笔记(14)

条款21:必须返回对象时,别妄想返回其reference当函数要返回一个对象时,不要返回pointer或者reference指向local stack对象,会返回一个未定义的pointer或reference;也不要返回reference指向一个heap-allocated对象,会造成内存泄露;也不要返回pointer或者reference指向local static对象,在需要多个对象时会造

2014-02-18 17:46:19 438

原创 Effective C++读书笔记(13)

条款19:设计class犹如设计typeclass的设计规范:1、新type的对象应该如何被创建和销毁?2、对象的初始化和对象的赋值该有什么样的区别?3、新type的对象如果被passed by value,意味着什么?(copy构造函数)4、什么是新type的“合法值”?5、你的新type需要配合某个继承图系么?6、你的新type需要什么样的转换?7、什么样的操作符和函数对此新type而言是

2014-02-18 15:30:14 425

转载 cross-dll和智能指针

来源:http://flintning.blog.sohu.com/117761263.html最近在做一个项目,存在大量的模块(exe或dll)间数据传递,希望避免频繁的数据复制降低处理效率,即一个模块创建的数据指针可以直接传递给另一个模块。首先考虑的就是所谓的cross-dll问题,即一个模块分配的内存不应该由另一个模块释放,因为两个模块可能使用不同版本的C运行期库,甚至不

2014-02-18 11:35:43 1413

原创 Effective C++读书笔记(12)

条款18:让接口容易被正确使用,不易被误用欲开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户可能做出什么样的错误。1、许多用户会出现对接口所传实参不对应或者取值范围有问题的错误。这些错误可以因为导入新类型而获得预防,可以通过简单地外覆类型来区别参数类型。(用成熟且经过充分锻炼的classes并封装其内数据比简单使用structs好)对于限制取值范围常见有两种方法:1、利

2014-02-18 11:34:52 415

原创 Effective C++读书笔记(11)

条款15:在资源管理类中提供对原始资源的访问资源管理类需要一个函数可以将RAII class对象转移到其所包含的原始资源,可以通过显式转换或隐式转换完成。显式转换:常在RAII class中定义一个get成员函数,用于返回RAII class内部的原始资源。也可以通过重载*或者->运算符。隐式转换:重载类型转换运算符。条款16:成对使用new和delete时要采取相同形式

2014-02-17 21:46:19 404

转载 重载类型转换操作符 遇到的问题

原文链接:http://www.cnblogs.com/chinazhangjie/archive/2010/08/19/1803049.html今天我对这段代码产生了质疑:operator double (){    return  static_cast  (sum)                            /static_ca

2014-02-17 21:20:02 386

原创 Effective C++读书笔记(10)

条款14:在资源管理类中小心copying行为并非所有资源都是heap-base,这些资源不适合直接应用智能指针作为资源管理类。需要建立自己的资源管理类。例如:处理类型为Mutex的互斥器对象,共有lock和unlock两个函数可用:void lock(Mutex* pm);void unlock(Mutex* pm);我们建立对应资源管理类控制互斥器的锁定和解锁。class Loc

2014-02-17 20:40:31 395

原创 Effective C++读书笔记(9)

条款13:以对象管理资源将动态分配的资源放进对象内,成为对象的成员变量,我们便可以依赖于C++的析构函数自动调用机制确保资源被释放。智能指针:用智能指针可以有效缓解C++的内存回收问题:C++没有自动内存回收机制,每次new出来的堆内存都要手动delete(std中的auto_ptr即是智能指针)。对于编译器来说,智能指针实际是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智

2014-02-17 19:15:12 375

原创 Effective C++读书笔记(8)

条款10:令operator=返回一个reference to *this为了实现连锁赋值,赋值操作符必须返回一个reference指向操作符的左侧实参。条款11:在operator=中处理“自我赋值”对于赋值操作符应能实现对象的自我赋值。否则会造成“在停止使用资源之前意外释放了它”。常见的解决方案有三种:1、赋值之前进行证同测试,比较“源对象”和“目标对象”的地址。if(th

2014-02-17 15:52:47 405

转载 气象站的故事-观察者模式

气象站的故事-观察者模式前言大家好!好久没有更新这个系列的文章了,这两个来月回家过了新年,公司搬了新家,就是这个系列的文章还没有更新,实在惭愧!同时再次真诚地感谢一直喜欢和支持这个系列文章的朋友们,因为你们的鼓励,我才有动力继续下去。可能因为这个系列每篇文章都比较长的原因,为了保证质量我总是字斟句酌,所以每次想动笔的时候都有点胆怯的感觉,但是还好每次只要写了开头我就会坚持把它写完的,还是万

2014-02-15 17:22:10 456

转载 鸭子-策略模式(Strategy)

鸭子-策略模式(Strategy)前言万事开头难,最近对这句话体会深刻!这篇文章是这个系列正式开始介绍设计模式的第一篇,所以肩负着确定这个系列风格的历史重任,它在我脑袋里默默地酝酿了好多天,却只搜刮出了一点儿不太清晰的轮廓,可是时间不等人,以后再多“迭代”几次吧!在前面的随笔里,我已经提到了,这个系列准备以《Head First Design Patterns》的结构为主线,所以每个模式的

2014-02-15 17:09:27 434

转载 设计模式随笔系列:开篇-模式和原则

开篇-模式和原则前言正式接触使用设计模式近两年了,一直想写点东西来巩固所学,但是迟迟没有动作,总想时间和见识再多一些的时候再动笔,但是拖得越久越感觉合适的时机永远不会有,只有不断实践才能换来进步,也许再不写就永远也写不出来了,于是我终于开始了。谈到设计模式,应该还没有人能超越GOF的开山之作,所以谈不上什么创新,归根结底还是重复前人的论述和思想,更多的只能是整理和个人的一些心得体会。因

2014-02-15 16:41:30 383

原创 Effective C++读书笔记(7)

条款8:别让异常逃离析构函数在两个异常同时存在的情况下,程序若不是结束执行就是导致不明确行为。析构函数绝对不要吐出异常,如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,常见处理方法有:1、如果抛出异常就结束程序。2、吞下异常,并记录下其记录。一种更加合理的方法是将这个异常放在来自析构函数以外的某个函数中去,并将其给程序员去调用,一次同时析构函数内仍包含一个”双保险“

2014-02-15 15:41:01 392

原创 Effective C++读书笔记(6)

条款7:为多态基类声明virtual析构函数栈空间和堆空间:一个由C/C++编译的程序占用的内存主要分为以下几个部分:1:栈区(stack):编译器自动分配释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构的栈。2:堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,分配方式类似于链表。3:全局区(static):存储全局变量和静态变量,初

2014-02-15 12:47:11 410

原创 Effective C++读书笔记(5)

条款5:了解C++默默编写并调用哪些函数默认的函数包括:构造函数、copy构造函数、copy赋值运算符和析构函数,所有这些函数都是public且inline。这些函数仅当被调用的时候才会被编译器创建出来。除非这个class的base class自身声明有virtual析构函数,则这个class的析构函数是non-virtual的。default copy赋值运算符在遇到引用成员变量或c

2014-02-14 16:50:52 383

转载 尽量不要使用#define,而是用const、enum、inline替换。

为什么这么说呢?或许很多程序员已经习惯在文件开始使用大量的#define语句。例如:这里程序文件开头有如下#define语句        #define     N                     10        #define     PI                     3.14        #define     MAX            

2014-02-14 14:46:10 477

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除