- 博客(30)
- 资源 (2)
- 收藏
- 关注
原创 Effective C++ 读书笔记(七) 模板与泛型编程
7 模板与泛型编程面向对象virtual 运行时多态 显示接口 重载、template和泛型 编译期多态 隐式接口• 条款41:了解隐式接口和编译期多态 Understand implicit interfaces and compile-time polymorphism.–
2013-08-30 15:14:07 4056
原创 Effective C++ 读书笔记(六) 继承与面向对象设计
条款32:确定你的pubilc继承塑模出is-a关系 Make sure public inheritance models “is-a”– C++进行(OOP)面向对象编程,最重要的一个规则是:public inheritance (公开继承)意味“is - a”(是一种)关系。– 如果你令class D(“de
2013-08-30 13:48:54 3991
转载 编程之美3.6——编程判断两个链表是否相交
问题:给出两个单向链表的头指针,而两个链表都可能带环,判断这两个链表是否相交,并且给出他们相交的第一个节点。解法:参考http://blog.csdn.net/ldong2007/article/details/4544203(1)判断链表是否存在环设置两个链表指针(fast, slow),初始值都指向链表头结点,然后连个指针都往前走,不同的是slow每
2013-08-24 17:33:47 3885
转载 数组分割
问题:1. 有一个无序、元素个数为2n的正整数数组,要求:如何能把这个数组分割为两个子数组,子数组的元素个数不限,并使两个子数组之和最接近。1. 解法1:由于对两个子数组和最接近的判断不太直观,我们需要对题目进行适当转化。我们知道当一个子数组之和最接近原数组之和sum的一半时,两个子数组之和是最接近的。所以转化后的题目是:从2n个数中选出任意个数,其和尽
2013-08-24 10:47:20 5238
转载 最长递增子序列 O(NlogN)算法 ( DP + 二分查找)
今天看编程之美,看到最长递增子序列问题。解法二看了两遍感觉越来越糊涂。感觉表述有欠妥之处。它不应该说长度为i的最大值的最小值,应该说成长度为i的序列中尾端最小的值。不知道表达明白了没有。看下面这个帖子吧,感谢felix的分享。看了好久好久,现在终于想明白了。试着把它写下来,让自己更明白。最长递增子序列,Longest Increasing Subsequence 下面我们简
2013-08-23 22:57:51 3975
转载 算法-求二进制数中1的个数
问题描述任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4这也是一道比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,下面介绍了几种方法来实现这道题,相信很多人可能见过下面的算法,但我相信很少有人见到本文中所有的算法。如果您上头上有更好的算法,或者本文没有提到的算法,请不要吝惜您的代码,分享的
2013-08-22 20:20:36 3827
转载 九种常用排序的性能分析总结
间间断断的将9种排序实现,并且将其以博客笔记的形式记录下来;现在就该来综合的分析这九种排序,让我们先来看看其算法复杂度和稳定性的分析结果:算法复杂度以及稳定性分析算法名称平均时间辅助空间稳定性冒泡排序O(n2)O(1)是选择排序O(n2)O(1)否插入排序O(n2)O(1)是
2013-08-19 20:49:06 4061
转载 求一个字符串中连续出现次数最多的子串
/* Author: Mcdragon Date: 15-07-11 21:17 Description: 求一个字符串中连续出现次数最多的子串. 基本算法描述: 给出一个字符串abababa 1.穷举出所有的后缀子串 substrs[0] = abababa; substrs[1] = bababa; substr
2013-08-19 20:41:30 3387
翻译 Chapter 3 | Stacks and Queues
Whether you are asked to implement a simple stack / queue, or you are asked to implement a modified version of one, you will have a big leg up on other candidates if you can flawlessly work with stack
2013-08-16 19:36:51 3449
转载 Const 重载解析(const参数重载 和 const成员函数重载)
书上和网上在很多地方都对const 的重载做了一些解释,但感觉都不是很详细。还有很多同学在不同的地方发问关于const 重载的问题,这里我又重新看了一下,做了一个简单的分析也可能有不对的地方,欢迎讨论。所谓重载,是指允许存在多个同名函数,而这些函数的参数表不同,即函数名相同但函数的签名不同。重载并不是面向对象编程的特有属性,这是因为重载是在编译阶段实现的,编译器根据函数不同的参数表,对同名函数
2013-08-16 10:26:54 6339 2
翻译 Chapter 2 | Linked Lists Cracking
2.1 Write code to remove duplicates from an unsorted linked list.FOLLOW UPHow would you solve this problem if a temporary buffer is not allowed?译文:从一个未排序的链表中移除重复的项进一步地,如果不允许使用临
2013-08-15 16:13:20 1701
翻译 Solutions to Chapter 1 | Arrays and Strings
1.1 Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures?译文:实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)
2013-08-14 17:00:56 1117
原创 Proxy 模式
作用:为其他对象提供一种代理以控制对这个对象的访问#include using namespace std; class Subject{public: Subject(){} virtual ~Subject(){} virtual void request() = 0;private:};class RealSubject:public Su
2013-08-13 16:07:28 791
原创 Effective C++ 读书笔记(五) 实现
5 实现 大多数情况下,适当提出拟的类定义以及函数声明,是花费最多心力的两件事。尽管如此,还是有很多东西需要小心:太快定义变量可能造成效率上的拖延;过度使用转型(casts)可能导致代码变慢又难维护,又招来微妙难解的错误;返回对象“内部数据之号码牌(handls)”可能会破坏封装并留给客户虚吊号码牌;为考虑异常带来的冲击则可能导致资源泄漏和数据败坏;过度热心地inlining
2013-08-13 15:02:53 860
原创 Template Method 模式
Method模式作用:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。UML结构图:现在看具体例子 泡茶喝泡咖啡
2013-08-12 19:59:32 733
原创 Singleton模式
单线程singleton模式#include using namespace std; template class Singleton { public: static T* getInstance() { if( !instance ) { instance = new T(); } retu
2013-08-11 21:33:21 644
原创 Effective C++读书笔记(四) 设计与声明
4 设计与声明• 软件设计,是“令软件做出你希望它做的事情”的步骤和做法,通常以颇为一般性的构想开始,最终演变成十足的细节,以允许特殊接口(interface)的开发,这些接口而后必须转换为C++声明式。条款18:让接口容易被正确使用,不易被误用 Makeinterfaces easy to use correctly and hard to use
2013-08-09 19:32:33 763
转载 C++ 模板类型萃取技术 traits
自从C++中引入了template后,以泛型技术为中心的设计得到了长足的进步。STL就是这个阶段杰出的产物。STL的目标就是要把数据和算法分开,分别对其进行设计,之后通过一种名为iterator的东西,把这二者再粘接到一起。设计模式中,关于iterator的描述为:一种能够顺序访问容器中每个元素的方法,使用该方法不能暴露容器内部的表达方式。可以说,类型萃取技术就是为了要解决和iterator有关的
2013-08-09 16:20:15 3599 2
原创 Effective C++读书笔记
Effective C++ 改善程序与设计的55个具体做法让自己习惯C++条款01:视C++为一个语言联邦条款02:尽量以const,enum,inline替换#define条款03:尽可能使用const条款04:确定对象被使用前已被初始化构造、析构、赋值条款05:了解C++默认编写并调用哪些函数条款06:若不想使用编译器自动生成的函数,就该明确拒绝条款07:为
2013-08-08 20:17:21 751
原创 Effective C++读书笔记(三) 资源管理
3 资源管理所谓资源就是,一旦用了它,将来必须还给系统。C++程序中最常使用的资源就是动态分配内存(如果你分配内存却从来不曾归还它,会导致内存泄露),但内存只是你必须管理的众多资源之一。 条款13:以对象管理资源 Use object to manage resources.• 把资源放进对象内,我们便可依赖C++的“析构函数自动调用机制”确保资源被
2013-08-08 19:51:47 895
原创 public、protected、private继承
C++类继承关系问题 在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public继承是最为常用的一种继承关系,代表了接口继承含义,而他们分别具体代表了什么含义呢?1. public 从语义角度上来说,public继承是一种接口继承,根据面向对象中的关系而言就是,子类 可以代替父类完成父类接口所声明的行为,也就是
2013-08-08 15:24:17 843
转载 C++的名称查找顺序
1。符号查找(对于函数此时只看名字,不看参数) 大致顺序是 (1)如果有限定名( XXX:: )那么就直接在XXX里查找 (2)函数局部名字空间 (3)(如果是成员)类名字空间 (4)递归向上至所有基类的名字空间 (5)当前名字空间 (6)递归向外至所有外层名字空间, 在任一层里, 用using导入的符号和该层的其他符
2013-08-06 21:34:31 966
原创 Effective C++读书笔记(二)构造、析构、赋值
•条款05:了解C++默默编写并调用哪些函数•Know whatfunctions C++ silently writes and calls–C++会为默认的空类(emptyclass)添加•Default 默认构造函数•Copy 构造函数•析构函数•Copy assignment 复制赋值操作符–唯有这些函数被调用时,它们才会被编译器创建出来。–•条款06:
2013-08-06 11:22:01 808
原创 设计模式——装饰者模式(Decorator)
装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能。类继承可能会带来类数量爆炸等问题,设计死板。巴克莱咖啡,分店几乎开遍世界各地。他们发展的实在是太快了,所以他们此时正在急于实现一套由计算机管理的自动化记账系统。在第一次研究了他们的需求以后,开发者设计了如下图的类结构:
2013-08-05 21:49:39 849
原创 Effective C++ 读书笔记(一)让自己习惯C++
1 让自己习惯C++条款01: 视C++为一个语言联邦 View C++ as a federation oflanguages – C。说到底C++仍是以C为基础。区块(blocks)、语句(statements)、预处理器(preprocessor)、内置数据类型(built-in data types)、数组(arrays)、指针(p
2013-08-05 15:09:14 876
转载 C++拾遗
因为C++实在是过于复杂了,时不时都会碰见一些晦涩的细节,因此特意发个帖子,留好位置,随时添加Item 1 前置声明 当不需要class A的完整定义而只需要其名称时,可以通过前置声明函数来避免包含class A对应的头文件,这样可以减少编译依赖关系 然而,需要注意的是,string和iostream不是类型名,而是typedef;由于标准不允许向st
2013-08-04 19:50:45 747
原创 non-local static对象初始化
C++中的static对象是指存储区不属于stack和heap、"寿命"从被构造出来直至程序结束为止的对象。这些对象包括全局对象,定义于namespace作用域的对象,在class、function以及file作用域中被声明为static的对象。其中,函数内的static对象称为local static 对象,而其它static对象称为non-local static对象。 这两
2013-08-04 16:08:34 1033
原创 设计模式——工厂模式
工厂模式工厂模式就是将对象实例化的过程封装起来,成批次的构造对象。应用情景小故事: 假设有个刚起步的加工儿童男装小手工作坊,此时生产还比较单一,只能加工一款式A。大多客户都是散户,订单也很少,随来订单随做。那此时的模式结构如下图:#include using namespace std;class ClothBoy { public: v
2013-08-04 10:56:11 785
转载 C++类对应的内存结构
提示1:对“内存结构”表示有疑问或不解的,先参考:http://blog.csdn.net/guogangj/archive/2007/05/25/1625199.aspx,本文使用的表示方法和VC6的Memory视图一致,即:左上表示低位。 提示2:下文提到的“类大小”严格上来说是该类经过实例化的对象的大小。当然了,光研究长度的话,两者差别不大,因为:CClass
2013-08-01 17:16:52 654
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人