自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Smile&搁浅

知识的积累,只需每天进步一点点!

  • 博客(310)
  • 资源 (12)
  • 收藏
  • 关注

转载 DESIGN PATTERNS - ABSTRACT FACTORY PATTERN

Abstract Factory PatternAbstract Factory - Provide an interface for creating families of related or dependent objects without specifying their concrete classes.Abstract Factory pattern lets a class ...

2020-03-25 16:21:50 288

转载 C++对象模型详解

C++对象模型详解点击打开链接https://www.cnblogs.com/tgycoder/p/5426628.htmlhttps://www.cnblogs.com/tgycoder/p/5426628.html

2018-03-30 16:57:34 516

原创 7_TwoDimensionalArray

//二维数组的创建、查询、销毁int **create(int m,int n){ int **arr=new int*[m]; for(int i=0;i<m;i++) { arr[i]=new int[n]; } return arr;}int search(int **arr,int m,int n,int...

2018-03-26 19:42:48 400

原创 6_BinarySearch

//[2 4 5 6 8 10 12 14 17 19] 5#include<iostream>using namespace std;int search(int array[], int len, int value){ int low=0,high=len-1; while(low<=high) { //int m...

2018-03-16 21:35:38 314

原创 5_JumpOutArrary

/*DP动态规划一个数组,每个位置的数字代表当前位置可以向前走的步长,判断该数组能否跳出数组之外case1 :[1,3,1,1,1,2] true// [1,4,4,4,5,5]case2 :[1,2,1,1,0,2] falsecase3 :[1,3,1,3,0,2] true*/#include<iostream>using namespace std...

2018-03-16 21:23:07 320

原创 4_Longest Substring Without Repeating Characters

//abcabcbb abc 3//bbbbb b 1//pwwkew wke 3#include<iostream>#include<string>#include<vector>using namespace std;int lengthOfLongestSubstring(string s...

2018-03-14 20:27:54 318

原创 3_Add Two Numbers

//Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)//Output: 7 -> 0 -> 8//Explanation: 342 + 465 = 807.#include<iostream>using namespace std;struct ListNode { int val; ListN...

2018-03-10 08:25:06 251

原创 2_shift_left

//0 1 2 3 4 5 6 7//1 2 3 4 5 6 7 0//2 3 4 5 6 7 0 1#include<iostream>#include<vector>using namespace std;void reverse_arr(vector<int>&vec,int start,int end){ for(;st...

2018-03-10 08:23:52 757

原创 1_two_sum

//数组:2 6 7 11 4 3 目标:9//下标:0 1 2 3 4 5//位置:1 2 3 4 5 6//当前元素依次往后遍历,在前边元素中找(target-当前元素)/*2 76 32 06 1*/#include<iostream>#include<vector>#include<map>using n...

2018-03-10 08:21:14 237

原创 C 语言字符数组的定义与初始化

C 语言字符数组的定义与初始化1、字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 char str[10]={ ‘I’,’ ‘,’a’,’m’,’ ‘,‘h’,’a’,’p’,’p’,’y’}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组 长度,则只将这些字符数组中前

2017-05-14 22:01:50 1247

转载 使用事件驱动模型实现高效稳定的网络服务器程序

几种网络服务器模型的介绍与比较围绕如何构建一个高效稳定的网络服务器程序,本文从一个最简单的服务器模型开始,依次介绍了使用多线程的服务器模型、使用非阻塞接口的服务器模型、利用select()接口实现的基于事件驱动的服务器模型,和使用libev事件驱动库的服务器模型。通过比较各个模型,得出事件驱动模型更适合构建高效稳定的网络服务器程序的结论。前言事件驱动

2016-08-30 21:24:39 556

原创 草原坝上滑梯

草原坝上滑梯 只能从上下左右侧移动 输入:行数R 列数C 输出:最长区域的长度 样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 输出:25#include <iostream>#include <algorithm>using namespace std;

2016-08-28 22:25:45 984 1

原创 字符串合法性长度

题目: 仅由三个自负A、B、C构成字符串,切字符串任意连续三个元素不能完全相同。如“ACCCAB”不合法,“ABBCBCA”合法。求满足条件的长度为n的字符串个数。假定不考虑整数溢出,要求时间和空间复杂度不高于O(N)。 提示:使用动态规划、滚动数组、矩阵乘幂#include <iostream>#include <string>using namespace std;int NumO

2016-08-28 13:41:03 998

原创 构造回文

给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子:abcdagoogle

2016-08-25 22:50:36 695

原创 线索二叉树

一、线索二叉树的原理    通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。如下图所示。    因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。    记ptr指向二叉链表中的一个结点,以下是建立线索的规

2016-08-13 14:59:20 566

原创 二叉树中节点的最大的距离

问题定义把二叉树看成一个图,父子节点之间的连线看成是双向的,定义“距离”为两个节点之间的边数。例如下图中最大距离为红线的条数为6.分析方法一、typedef struct Node { struct Node *pleft; //左孩子 struct Node *pright; //右孩子

2016-08-12 21:33:41 5214

转载 Morris Traversal方法遍历二叉树

本文主要解决一个问题,如何实现二叉树的前中后序遍历,有两个要求:1. O(1)空间复杂度,即只能使用常数空间;2. 二叉树的形状不能被破坏(中间过程允许改变其形状)。通常,实现二叉树的前序(preorder)、中序(inorder)、后序(postorder)遍历有两个常用的方法:一是递归(recursive),二是使用栈实现的迭代版本(stack+iterative)。这

2016-08-12 18:09:27 1219

转载 图解后缀表达式的计算过程

为了解释后缀表达式的好处,我们先来看看,计算机如何应用后缀表达式计算出最终的结果20的。后缀表达式:9 3 1-3*+ 10 2/+规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。下面是详细的步骤:1. 初始化一个空栈。此桟用来对要运算的数字进出使用。

2016-08-11 22:51:11 25501 2

转载 将中缀表达式转化为后缀表达式

我们把平时所用的标准四则运算表达式,即“9+(3-1)*3+10/2"叫做中缀表达式。因为所有的运算符号都在两数字的中间,现在我们的问题就是中缀到后缀的转化。中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1-3*+ 10 2/+”规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号

2016-08-11 22:39:15 1211 1

转载 海量数据处理——trie树

1. 什么是trie树  1.Trie树 (特例结构树)        Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。     Trie的核心思想是

2016-08-11 16:31:00 1247

转载 海量数据处理问题汇总及方法总结

面试题中总是有好多海量数据的处理问题,在这里列出一些常见问题,便于以后查阅: 类型1:hash映射+hash统计+堆排序1、 给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。       可以估计每个文件安的大小为5G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治

2016-08-10 16:16:09 2822 1

转载 海量数据处理常用思路和方法

1.Bloom filter 适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集 基本原理及要点: 对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。

2016-08-10 16:14:03 478

转载 海量数据处理——倒排索引

一,什么是倒排索引问题描述:文档检索系统,查询那些文件包含了某单词,比如常见的学术论文的关键字搜索。基本原理及要点:为何叫倒排索引?一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。 以英文为例,下面是要被索引的文本:    T0 = "it is what it is"    T1 = "what is it"    T2 =

2016-08-10 16:11:30 3657

原创 海量数据处理——分治和hash映射

什么是Hash     Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数

2016-08-10 16:06:03 17388 2

转载 海量数据处理——位图法bitmap

一、定义       位图法就是bitmap的缩写。所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。在STL中有一个bitset容器,其实就是位图法,引用bitset介绍:A bitset is a special container class that is designed to store b

2016-08-10 15:58:15 11847 1

转载 海量数据处理——布隆过滤器

布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元素

2016-08-10 15:28:19 795

原创 两个链表的第一个公共结点

题目描述输入两个链表,找出它们的第一个公共结点。1、蛮力法/*蛮力法struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindFirstC

2016-08-07 22:33:22 366

原创 数组中的逆序对

题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述:题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size 对于%75的数据,size 对于%100的数据,size输入例子:1,

2016-08-07 16:06:44 293

原创 第一个只出现一次的字符

题目描述在一个字符串(11、哈希表class Solution {public: int FirstNotRepeatingChar(string str) { int len=str.size(); if(len10000) return -1; int hashTable[256]={0}

2016-08-07 10:55:26 326

原创 丑数

题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。方法一、逐个判断class Solution {public: bool isUglyNumber(int number) { while(number

2016-08-04 16:33:33 318

原创 把数组排成最小的数

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。/* * 解题思路: * 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。 * 排序规则如下: * 若ab > ba 则

2016-08-04 10:40:12 235

原创 从1到n整数中1出现的次数

题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。方法一、class Solution {public: int numb

2016-08-04 08:31:52 462

原创 连续子数组的最大和

题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?

2016-08-03 21:04:35 275

转载 HTTP协议详解(真的很经典)

内容来自http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.htmlAuthor :Jeffrey引言HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版

2016-08-03 10:43:00 410

原创 寻找第K大

有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。测试样例:[1,3,5,2,2],5,3返回:2class Finder {public: int partition(vector& a,int low,int high) {

2016-08-02 10:56:52 323

转载 常用查询的例子

3.6. 常用查询的例子3.6.1. 列的最大值3.6.2. 拥有某个列的最大值的行3.6.3. 列的最大值:按组3.6.4. 拥有某个字段的组间最大值的行3.6.5. 使用用户变量3.6.6. 使用外键3.6.7. 根据两个键搜索3.6.8. 根据天计算访问量3.6.9. 使用AUTO_INCREMENT下面是一些学习如何用MySQL解决一些常见问题的例子。在一些例子

2016-07-31 21:55:40 363

原创 STL各种容器迭代器失效的时机

STL各种容器迭代器失效的时机一. 种类:标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串非标准关联容器hash_set、hash_multiset、hash_m

2016-07-31 11:10:26 5246

原创 调度算法解析

一、常见的批处理作业调度算法1.先来先服务调度算法(FCFS):就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。2.短作业优先调度算法(SPF): 就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并

2016-07-30 21:59:51 14012 3

原创 VC调试

VC提供一种被称为Watch的机制来观看变量和表达式的值,由于指针指向的数组,Watch只能显示第一个元素的值,为了显示数组的后续内容,或者要显示一片内存的内容,可以使用()功能MemoryRegstersConditionsVariblesWatch VC支持查看变量、表达式和内存的值。所有这些观察都必须是在断点中断的情况下进行

2016-07-30 14:52:47 234

原创 二分查找

二分查找1、二分查找(Binary Search)     二分查找又称折半查找,它是一种效率较高的查找方法。     二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。2、二分查找的基本思想     二分查找的基本思想是:(设R[low..high]是当前的查找区间) (1)首先确定该区间的中点位置:

2016-07-30 11:55:59 817

惠普打印机驱动(LaserJet_1010_1012_1015)

惠普打印机驱动,支持型号为:LaserJet_1010_1012_1015

2016-11-03

STL源码讲解文档

身为C++标准库最重要的组成部分,STL(标准范本库)不仅是一个可复用元件库,而且是一个包罗演算法与资料结构的软体框架(framework)。“框架”这个词,本身就有庞大、稳定、完整而可扩展的涵义。软体框架,则是用一行行精细准确的源码,构造一个庞大、稳定、完整而可扩展的软体架构,稍有软体发展经验的人都知道,要做到这些,谈何容易! STL在1994年走入C++标准,使得原本即将推出的C++标准延迟4年问世而无怨无悔,并为之对内容做巨幅改进,而今STL不仅为千千万万C++程式师所日常运用,而且获得极高的学术赞誉,成为了一个典范,一种境界。作为一个软体框架,STL所取得的成功,实在可以用“辉煌”来形容,其所内涵的软体思想和技术经验,更是无比的深厚与精致。 学习编程的人都知道,阅读剖析名家代码乃是提高水准的捷径。源码之前,了无秘密,大师们的缜密思维,经验结晶,技术思路,独到风格,都原原本本地体现在源码之中。在你仔细推敲之中,迷惑不解之时,恍然大悟之际,你的经验、思维、视野、知识乃至技术品味都会获得快速的成长。特别是面对STL这样优秀而普遍的作品,无论你是为了满足作为程式师第二天性的求知欲,还是在日常工作中解决实际问题,总会有一天,你会打开一个叫做<vector>或者<algorithm>的表头档,想把STL背後的秘密看个究竟。英文 有一个常用短语,叫做“under the hood”,钻进魔术师的帐篷,屏住呼吸,瞪大眼睛,把那些奇妙的魔法看个通透,让自己的理解和技艺获得巨幅的提升,这种诱惑,任何一个程式师都无法抵挡! 不过,想要研读STL源码,绝对没有那麽简单。STL是精致的软体框架,是为优化效率而无所不用其极的艺术品,是资料结构与演算法大师经年累月的智慧结晶,是泛型思想的光辉诗篇,是C++高级技术的精彩亮相,这些灿烂的赞誉,体现在数万行源码 ,对於一个初涉此道的学习者来说,就是一个感觉:“难!”。无论你是会浅尝辄止地退出这次探险,还是勇敢地向浓雾中前进,当你受困於STL精致的大网之中,为那些迷一般的结构和动作感到茫然无措的时候,所有人都会冒出一个念头:“如果有这样一本书,既能够提纲挈领,为我理顺思绪,指引方向,同时又能够照顾小节,阐述细微,帮助我更快更好地理解STL源码,那该有多好!”

2016-06-05

STL源码剖析 候捷配套

身为C++标准库最重要的组成部分,STL(标准范本库)不仅是一个可复用元件库,而且是一个包罗演算法与资料结构的软体框架(framework)。“框架”这个词,本身就有庞大、稳定、完整而可扩展的涵义。软体框架,则是用一行行精细准确的源码,构造一个庞大、稳定、完整而可扩展的软体架构,稍有软体发展经验的人都知道,要做到这些,谈何容易! STL在1994年走入C++标准,使得原本即将推出的C++标准延迟4年问世而无怨无悔,并为之对内容做巨幅改进,而今STL不仅为千千万万C++程式师所日常运用,而且获得极高的学术赞誉,成为了一个典范,一种境界。作为一个软体框架,STL所取得的成功,实在可以用“辉煌”来形容,其所内涵的软体思想和技术经验,更是无比的深厚与精致。 学习编程的人都知道,阅读剖析名家代码乃是提高水准的捷径。源码之前,了无秘密,大师们的缜密思维,经验结晶,技术思路,独到风格,都原原本本地体现在源码之中。在你仔细推敲之中,迷惑不解之时,恍然大悟之际,你的经验、思维、视野、知识乃至技术品味都会获得快速的成长。特别是面对STL这样优秀而普遍的作品,无论你是为了满足作为程式师第二天性的求知欲,还是在日常工作中解决实际问题,总会有一天,你会打开一个叫做<vector>或者<algorithm>的表头档,想把STL背後的秘密看个究竟。英文 有一个常用短语,叫做“under the hood”,钻进魔术师的帐篷,屏住呼吸,瞪大眼睛,把那些奇妙的魔法看个通透,让自己的理解和技艺获得巨幅的提升,这种诱惑,任何一个程式师都无法抵挡! 不过,想要研读STL源码,绝对没有那麽简单。STL是精致的软体框架,是为优化效率而无所不用其极的艺术品,是资料结构与演算法大师经年累月的智慧结晶,是泛型思想的光辉诗篇,是C++高级技术的精彩亮相,这些灿烂的赞誉,体现在数万行源码 ,对於一个初涉此道的学习者来说,就是一个感觉:“难!”。无论你是会浅尝辄止地退出这次探险,还是勇敢地向浓雾中前进,当你受困於STL精致的大网之中,为那些迷一般的结构和动作感到茫然无措的时候,所有人都会冒出一个念头:“如果有这样一本书,既能够提纲挈领,为我理顺思绪,指引方向,同时又能够照顾小节,阐述细微,帮助我更快更好地理解STL源码,那该有多好!” 望着长长的STL着作列表,一个“真正”的C++程式师,多少会有一点遗憾。自从STL问世以来,出版了大量的书籍,帮助读者了解它的思想,学习它的用法,掌握它的技巧。其中佼佼者如Matt Austern的《Generic Programming and STL》,Nicolai Josuttis的《The C++ Standard Library》,Scott Meyers的《Effective STL》,已成C++经典名着。然而,定位在引导学习者进行STL源码分析的着作,可以说是凤毛麟角。毕竟,既要能高屋建瓴,剖析大架构,不为纷繁琐碎之细节而迷乱,又能具体而微,体现细致之处的精妙缜密,不因为宏大体系而失之粗略,无论对於专家高手还是技术作者,都是太难达到的目标。 读了这本《STL源码剖析》之後,我认为,这个遗憾终於被补足了! 本书的作者侯捷先生是蜚声海峡两岸的着名IT技术作家,在C++,Windows系统原理,泛型理论和STL等技术领域有极深的造诣。然而,侯捷最令人称道之处,乃是他剖析大架构的能力。所谓剖析大架构,就是要在洋洋洒洒数以万行计的源码中,精准定位,抽取核心观念,高屋建瓴,纲举目张,将看上去乱麻一般的源码梳理得头绪清晰,条理分明,同时又照顾细节,叁透精微,把一个个关键动作阐述得通通透透,这种能力,我以为至少在华人技术作者中,侯捷堪执牛耳。在他的名作《深入浅出MFC》中,侯捷将自己这方面的能力展现得淋漓尽致,而在这本《STL源码剖析》中,我们又看到了一次更加精彩的表现。 我有机会作为大陆最早的几个读者之一,详细拜读了侯捷的这本最新STL专着,感到了一种强烈的技术冲动,说得俗一点,就是觉得很过瘾!具体来说,我以为这本书至少有四大特点,使它成为我所见过的最出色的一本STL源码剖析类着作。 首先,选材精当,立足高远。STL是一个标准,因而有各种实作版本。本书所剖析的SGI STL,可以说是设计最巧妙,思想最深刻,获得赞誉最盛,认同最广的STL实作。当然,这份出自STL之父Alex Stepanov,以及Matt Austern,David Musser等巨匠之手的经典作品,剖析阐述起来自然也需要花费更大的心力。侯捷籍其扎实的理论与技术素养,毅然选择这份作品来剖析,是需要极大勇气与自信的。同样,本书对读者的预期,也是很高的,不但要有扎实的基本功,更要有掌握STL的兴趣与坚韧意志。读这本书,你可以有充分的信心,学到的是超一流大师的思想和经验,所谓名门正派,高屋建瓴。 其次,脉络清晰,组织顺序匠心独具。任何人打算系统阅读STL源码,所必须作出的第一个决定就是,从何处开始?我在初读此书时,一个最疑惑的地方就是侯捷居然把allocator放在所有组件之前讲述。要知道,allocator这个东西,对一般的使用者完全透明,根本感觉不到其存在,以至於在名着《The C++ Standard Libaray》中,Nicolai Josuttis将这一部分放在全书最後。既然如此,又何必让这个无名小卒占据头版头条?我一开始还真是不理解。直到後来,我自己有一些扩展STL的实践,才发现,用的时候你固然可以对allocator不闻不问,但一旦要领悟STL的工作原理,或者要自己扩展STL的功能,则对於allocator的掌握几乎是第一先决条件。不了解allocator,则无论剖析也好,扩展也罢,必然处处碰壁。侯捷毫不迟疑首先帮读者搬开这块绊脚石,理出头绪,实在是匠心独具。紧接着的第三章iterator及traits,直入STL的核心观念与关键技术,剑走中锋,直取要害,高举高打,开诚布公,直接把理解STL的钥匙交道读者手上。此章一过,读者神气完足,就可以大刀阔斧地打通STL的重重关隘。此布局只要稍有变化,读者的学习难度势必猛增。侯捷的此种安排,实在是大家手笔! 此外,本书在技术上迎难而上,详略得当,完整而重点突出。了解SGI STL的读者都知道,这份作品对C++标准中的STL做了大量的扩充,增加了专用的高效allocator,用以操作巨型字串的rope,单链表slist,以及万众企盼的hash容器等等,再加上STL本身就有很多精微之处,技术上的难点不少。此类书籍的作者,但凡稍有一丝懈怠之心,大可以冠冕堂皇地避重就轻。然而侯捷在此书中对重点难点毫不避讳,无论是标准功能还是非标准功能,只要对读者理解STL架构有益,只要有助於提高读者的技术,增长读者的视野与经验,书中必然不畏繁难,将所有技术细节原原本本和盘托出。另一方面,所谓剖析源码,其目的在於明理,解惑,提高自身水平,并不是要穷经皓首,倒背如流。因此,一旦道理讲清楚,书中就将重复与一般性的内容一笔带过,孰轻孰重,一目了然,详略十分得当,这一点对於提高读者的学习效率,有着巨大的意义。 最後一点,本书通过大量生动范例和插图讲解基本思想,在同类书籍中堪称典范。虽然我把这一点放在最後,但我相信大部分读者站在书店,随手翻过这本书,得到的第一印象便是这一点。STL之所以为大家所津津乐道,除了其思想深刻之外,最大的因素是它实用。它所包装的,是演算法与资料结构的基本功能。作为一个程式师,如果你是做资料库编程的,大可以不懂组合语言,如果你是写驱动程式的,大可以不必通晓人工智慧,写编译器的可以不用懂什麽电脑图形学,作业系统内核高手的不用精通网站架设,然而,如果你不懂资料结构与演算法的基础知识,不具备资料结构与演算法的基本技能,那就完全丧失称为一个程式师的资格!市面上讲述演算法与资料结构的专着汗牛充栋,俯拾皆是。相比之下,本书倒并不是以此为核心目标的。但是,可曾有哪位读者看到任何一本书像本书一样,将红黑树用一张张清晰生动的图解释得如此浅显易懂?所谓一图胜千言,在教授基本资料结构与演算法方面,我想不出还有任何一种方法,能够比幻灯般的图片更生动更令人印象深刻了。读过此书的每一位读者,我想都会为书中那一副副插图所打动,作者细致严谨的作风,时刻为读者考虑的敬业精神,也许是更值得我们尊敬的东西。 侯捷先生在一篇影响广泛的STL技术杂文中,将STL的学习境界划分为三个阶段,(1) 会用,(2) 明理,(3) 扩展。阅读STL源码是由第一层次直贯第二层次,而渐达於第三层次的一条捷径,当然也是条荆棘之路。如果你是一个勇於征服险峰的程式师,如果你是一个希望了解under the hood之奥秘的程式师,那麽当你在攀登STL这座瑰丽高山的时候,这本书会大大地帮助你。我非常热情地向您推荐这本着作。当然,再好的书籍只是工具,能不能成功,关键还在你自己。

2016-06-05

STL source code

STL被内建在你的编译系统之内。STL的版本很多,常见的有HP STL、PJ STL、 SGI STL等。 在C++标准中,STL被组织为下面的17个头文件:<algorithm>、<deque>、<functional>、<iterator>、<array>、<vector>、<list>、<forward_list>、<map>、<unordered_map>、<memory>、<numeric>、<queue>、<set>、<unordered_set>、<stack>和<utility>。 STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

2016-06-05

设计模式之工厂模式

本程序为简单工厂模式、工厂方法模式、抽象工厂模式的综合代码,详细地讲述了工厂模式的应用,简洁明了!

2015-12-24

SX1278模块

整体程序:sx1278驱动代码 + SPI外设代码 + UARST上位机调试代码 + 测试平台代码(sx12xxEiger) 测试代码链接:http://download.csdn.net/detail/yangquanhui1991/9278731

2015-11-18

BLE-CC41-A蓝牙模块

BLE-CC41-A蓝牙模块是深圳市博陆科电子科技有限公司专为智能无线数据传输而打造, 采用美国TI公司CC2541芯片, 配置 256Kb 空间,遵循V4.0 BLE蓝牙规范。 支持AT 指令,用户可根据需要更改串口波特率、设备名称、 配对密码等参数,使用灵活。 本模块支持UART接口, 有成本低、体积小、具功耗低、收发灵敏高等优点,只需配备性少许的外围元件就能实现其强大功能。

2015-11-18

SX1276/1278LoRa模块测试程序

整体程序:sx1278驱动代码 + SPI外设代码 + UARST上位机调试代码 + 测试平台代码(sx12xxEiger) 本程序主要基于STM32平台; 测试通过!

2015-11-18

BLE-CC41-A蓝牙模块驱动程序

BLE-CC41-A蓝牙模块是深圳市博陆科电子科技有限公司专为智能无线数据传输而打造, 采用美国TI公司CC2541芯片, 配置 256Kb 空间,遵循V4.0 BLE蓝牙规范。 支持AT 指令,用户可根据需要更改串口波特率、设备名称、 配对密码等参数,使用灵活。 本模块支持UART接口, 有成本低、体积小、具功耗低、收发灵敏高等优点,只需配备性少许的外围元件就能实现其强大功能。 代码经过测试通过!

2015-11-18

虚拟化知识

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

2015-08-18

操作系统:精髓与设计原理02(读书笔记)

本笔记最大的特点就是对操作系统的基本概念解释的很清楚;对操作系统的原理和内容都做了清晰的阐述。同时,还通过列举实际的操作系统(如windows和linux),对某些问题来进一步说明,使得原理和概念性的东西不再那么枯燥。 最后,这本书比Andrew S.Tanenbaum的那本经典的《现代操作系统》还要更加深入一些,不仅可以让读者入门,还可以让读者对操作系统的理解更加的深刻。

2015-07-26

操作系统:精髓与设计原理01(读书笔记)

本笔记最大的特点就是对操作系统的基本概念解释的很清楚;对操作系统的原理和内容都做了清晰的阐述。同时,还通过列举实际的操作系统(如windows和linux),对某些问题来进一步说明,使得原理和概念性的东西不再那么枯燥。 最后,这本书比Andrew S.Tanenbaum的那本经典的《现代操作系统》还要更加深入一些,不仅可以让读者入门,还可以让读者对操作系统的理解更加的深刻。

2015-07-26

空空如也

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

TA关注的人

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