自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(56)
  • 资源 (20)
  • 收藏
  • 关注

原创 STL源码剖析 容器 stl_hashtable.h

hashtable---------------------------------------------------------------------------二叉搜索树具有对数平均时间的表现,它建立在输入数据有足够的随机性的假设hashtable 有常数平均时间的表现,基于统计,不需依赖输入元素的随机性hashtalbe 的简单实现:所有元素都 16-bits 不带正负号的整数,范围 0~65535,配置一个 array,索引号码为 0~65535,初值全部为 0 。每一个元素

2014-07-23 09:27:44 1293

原创 STL源码剖析 容器 stl_map.h

map--------------------------------------------------------------------------------所有元素都会根据元素的键值自动被排序。map的所有元素都是 pair,同时拥有实值和键值。不可以修改元素的键值,因为它关系到 map 元素的排列规则可以修改元素的实值,因为它不影响 map 的排列规则map iterator 既不是一种 constant iterators , 也不是一种 mutable iterator标准

2014-07-22 16:50:59 1270

原创 STL源码剖析 算法 set

set相关算法------------------------------------------------------------------------------------描述:set_union , set_difference , set_intersection , set_symmetric_difference 算法接受的 set ,必须是有序区间,适用于以 RB-tree 为底层的 set/multiset , 不适用于以 hash 为底层的 hash_set/hash_mul

2014-07-22 16:49:39 1060

原创 STL源码剖析 容器 stl_tree.h

RB-tree(红黑树)--------------------------------------------------------------------------平衡二叉搜索树 --> 平衡可提高搜索效率常见的平衡二叉搜索树有:AVL-tree(任何节点的左右子树高度相差最多 1)、红黑树、AA-treeAVL-tree 破坏平衡的情况及恢复平衡的方法恢复时要先找到失去平衡的点外侧插入 --> 单旋转内侧插入 --> 双旋转 图5-10图5-11图5-12红黑树是

2014-07-22 16:45:58 1270

原创 STL源码剖析 容器 stl_set.h

set------------------------------------------------------------------------所有元素都会根据元素的键值自动被排序。不可以通过 set 的迭代器改变 set 的元素值。因为 set 元素值就是其键值,关系到 set 元素的排列规则。set<T>::iterator 被定义为底层 RB-tree 的 const_iterator,杜绝写入操作标准的 STL set 以 RB-tree 为底层机制,就像 stack 以 dequ

2014-07-22 16:44:30 993

原创 STL源码剖析 容器 stl_queue.h

queue----------------------------------------------------------------------stack 是一种配接器(adapter),以某种容器作为底部结构,改变其接口,使之符合"先进先出"的特性。SGI STL 默认以 deque 为 stack 底部结构没有遍历行为,没有遍历器示例:#include <queue>#include <list>#include <iostream>#include <algorithm>

2014-07-21 10:05:48 1032

原创 STL源码剖析 容器 stl_stack.h

stack-------------------------------------------------------------stack 是一种配接器(adapter),以某种容器作为底部结构,改变其接口,使之符合"先进后出"的特性。SGI STL 默认以 deque 为 stack 底部结构没有遍历行为,没有遍历器示例:#include <stack>#include <list>#include <iostream>#include <algorithm>using names

2014-07-21 10:03:24 912

原创 STL源码剖析 容器 stl_deque.h

deque------------------------------------------------------------------------??一直看不懂 operator->() ,不明白它为什么不用接受参数,直接 return &(operator*())好像我们用迭代器的时候也不没怎么用到这个函数,甚至我都不会用1.概述vector 是单向开口的连续线性空间,deque 则是一种双向开口的连续线性空间允许常数时间内对起头端进行元素的插入和移除操作没有容量概念,因为它是动

2014-07-21 09:59:23 1151

原创 STL 源码剖析 算法 stl_heap.h

heap-------------------------------------------------------------------------binary heap 是一种完全二叉树。隐式表示法:以 array 表述 tree。小技巧:将 array 的 #0 元素保留,则第 i 个元素的左右子节点分别是 2i 和 2i + 1,父节点是i/2 --> STL 里没有采用这种小技巧将 array 无法动态改变大小,所以用 vector 替代 array这个文件里提供了各种堆操作的

2014-07-21 09:58:35 996

原创 STL源码剖析 容器 stl_list.h

list----------------------------------------------------------------------??为什么很多在算法库里有的算法还要在类的成员函数里重新实现一遍?-->1.因为算法库里的是通用的,对于具体的类来说效率不高。比如说 reverse 如果直接用 stl_algo.h 里的 reverse,会再调用 iter_swap,而 iter_swap 的实现方法是借用临时变量来交换两个迭代器指向的元素,这样会调用好几次构造函数、拷贝方法、析构

2014-07-21 09:57:31 1341

原创 STL源码剖析 容器 stl_vector.h

vector----------------------------------------------------------------------描述:1.迭代器vector 维护的是一个连续线性空间,它的迭代器是普通指针,能满足 RandomAccessIterator 所有必要条件:operator*, operator->,operator++,operator--,operator+,operator-,operator+=,operator-=,operator[]2.数据

2014-07-20 18:35:42 1280

原创 STL 源码剖析 算法 stl_algo.h -- merge sort

merge sort----------------------------------------------------------------------描述:归并排序思路:1.将区间对半分割2.对左、右段分别排序3.利用inplace_merge将左、右段合并成为一个完整的有序序列复杂度:O(log n)源码:template<class BidirectionalIter>void mergesort(BidirectionalIter first, Bidirecti

2014-07-20 18:31:07 1183

原创 STL 源码剖析 算法 stl_algo.h -- inplace_merge

inplace_merge(应用于有序区间)--------------------------------------------------------------------描述:如果两个连接在一起的序列[first, middle)和 [middle, last]都已排序,那么 inplace_merge 可将它们结合成单一一个序列,并仍有序。源码:template <class BidirectionalIterator>inline void inplace_merge(Bidi

2014-07-20 18:28:40 1090

原创 STL 源码剖析 算法 stl_algo.h -- nth_element

nth_element------------------------------------------------------------------------------描述:重新排序,使得[nth,last)内没有任何一个元素小于[first,nth)内的元素,但对于[first,nth)和[nth,last)两个子区间内的元素次序则无任何保证。思路:1.以 median-of-3-partition 将整个序列分割为更小的左、右子序列2.如果 nth 迭代器落于左序列,就再对左子

2014-07-20 18:25:49 1119

原创 STL 源码剖析 算法 stl_algo.h -- equal_range

equal_range(应用于有序区间)--------------------------------------------------------------------------------------------------------------------------------------描述:利用二分查找找到一个区间,区间里的所有值都等于给定值,返回的是一个pair,分别存储区间的上界迭代器和下界迭代器源码:template <class ForwardIterator, c

2014-07-20 18:23:31 998

原创 STL 源码剖析 算法 stl_algo.h -- partial_sort / partial_sort_copy

partial_sort / partial_sort_copy-----------------------------------------------------------------------------------------------------------------------------------------描述:本算法接受一个 middle 迭代器(位于序列[first, last) 之列),然后重新安排[first, last),使序列中的 middle - firs

2014-07-20 18:14:25 1206

原创 STL 源码剖析 算法 stl_algo.h -- random_shuffle

random_shuffle--------------------------------------------------------------------------------------------------------------------------------------------------------------------------描述:将[first,last)的元素次序随机重排。思路:必须是 RandomAccessIterator 1.遍历区间2.产生[

2014-07-20 18:06:59 1436

原创 STL 源码剖析 算法 stl_algo.h -- pre_permutation

pre_permutation----------------------------------------------------------------描述: 取得 [first, last) 所标示之序列的前一个排列组合。如果没有,返回 false,有,返回true思路:从后往前1.找两个相邻元素,令左端的元素为*i,右端的元素为*ii,且满足 *i > *ii2.找出第一个小于 *i 的元素,令其为 *j,将*i,*j元素对调3.将ii右端的所有元素颠倒template <cl

2014-07-20 18:00:45 1018

原创 STL 源码剖析 算法 stl_algo.h -- next_permutation

next_permutation-----------------------------------------------------------------------描述: 取得 [first, last) 所标示之序列的下一个排列组合。如果没有,返回 false,有,返回true思路:从后往前1.找两个相邻元素,令左端的元素为*i,右端的元素为*ii,且满足 *i < *ii2.找出第一个大于 *i 的元素,令其为 *j,将*i,*j元素对调3.将ii右端的所有元素颠倒源码:t

2014-07-19 19:46:17 832

原创 STL 源码剖析 算法 stl_algo.h -- binary_search

int main(){ int A[] = { 1, 2, 3, 3, 3, 5, 8 }; const int N = sizeof(A) / sizeof(int); for (int i = 1; i <= 10; ++i) { cout << "Searching for " << i << ": " << (binary_search(A, A + N, i) ? "present" : "not present") << endl; }}/*

2014-07-19 19:44:20 890

原创 STL 源码剖析 算法 stl_algo.h -- upper_bound

upper_bound(应用于有序区间)-------------------------------------------------------------------------------------------------------------------------------------------------描述:受STL区间前闭后开习惯的影响,upper_bound成功找到某个值时,返回一个迭代器指向每一个"不大于 value "的元素的下一个位置,而不是指向 value 的迭代

2014-07-19 19:43:27 854

原创 STL 源码剖析 算法 stl_algo.h -- lower_bound

lower_bound(应用于有序区间)--------------------------------------------------------------------------------------------------------------------------描述:二分查找,返回一个迭代器指向每一个"不小于 value "的元素,或 value 应该存在的位置思路:1.循环直到区间长度为 0 2.如果 *middle < value,在后半段继续查找3.如果 *mid

2014-07-19 19:42:05 1181

原创 STL 源码剖析 算法 stl_algo.h -- search_n

search_n ----------------------------------------------------------------------------------------描述:在序列[first, last) 所涵盖的区间中,查找"连续 count 个符合条件之元素"所形成的子序列,并返回迭代器 last 思路:1.首先找出 value 第一次出现点2.该出现点的后面是否连续出现 count - 1 个 value3.如果是,找到了,如果不是,在当前元素后的区间重新找

2014-07-19 19:40:46 846

原创 STL 源码剖析 算法 stl_algo.h -- rotate

rotate--------------------------------------------------------------描述:将[first, middle) 内的元素和[middle, last) 内的元素互换。图6-6g/*------------------------------------------------------------*分派函数(dispatch function)*/template <class ForwardIterator>inline

2014-07-18 16:36:05 918

原创 STL 源码剖析 算法 stl_algo.h -- search

search-------------------------------------------------------------------------描述:在序列一[first1, last1) 所涵盖的区间中,查找序列二[first2, last2) 的首次出现点。思路:1.遍历序列二2.如果两序列的当前元素一样,都前进 13.否则序列二的迭代器重新指向开始元素,序列一前进 1 ,序列一的长度减 1复杂度:最坏情况是平方: 最多 (last1 - first1) * (last2

2014-07-18 16:34:54 882

原创 STL 源码剖析 算法 stl_algo.h -- includes

includes(应用于有序区间)-------------------------------------------------------------描述:S1和S2都必须是有序集合,判断序列二 S2 是否"涵盖于"序列一 S1,即"S2的每一个元素是否都出现于 S1中"思路:1.遍历两个区间,直到其中一个走完2.如果序列二的元素小于序列一的元素,则在序列一中不可能有元素等于序列二的当前元素了,直接返回 false3.如果序列一的元素小于序列二的元素,则序列一前进 14.如果两序列元

2014-07-18 16:33:43 846

原创 STL 源码剖析 算法 stl_algo.h -- partition

partition------------------------------------------------------------------------描述:partition 会将区间[first,last) 中的元素重新排列。所有被一元条件运算 pred 判定为 true 的元素,都会被放在区间的前段,被判定为 false 的元素,都会被放在区间的后段。partition 不稳定,不保证 partition 后元素保留在原始相对位置, stable_partition 稳定思路:

2014-07-18 16:29:31 922

原创 STL 源码剖析 算法 stl_algo.h -- merge

merge (应用于有序区间)--------------------------------------------------------------------------描述:将两个经过排序的集合S1和S2,合并起来置于另一段空间。所得结果也是一个有序(sorted)序列思路:1.遍历两个序列直到其中一个结束了2.如果序列一的元素较小,将它放到结果序列中,并前进 13.如果序列二的元素较小,将它放到结果序列中,前前进 14.遍历结束后,将还没有遍历完的序列复制到结果序列的尾部源码:

2014-07-18 16:29:20 710

原创 STL 源码剖析 算法 stl_algobase.h

1.iter_swap描述:将两个 ForwardIterator 所指的对象对调源码://version 1template <class ForwardIterator1, class ForwardIterator2, class T>inline void __iter_swap(ForwardIterator1 a, ForwardIterator2 b, T*) { T tmp = *a; *a = *b; *b = tmp;}//version 2template

2014-07-16 17:33:50 874

原创 STL 源码剖析 算法 stl_numeric.h -- copy

唯一对外接口/*--------------------------------------------------------------------------------------* copy 函数及其重载形式*///完全泛化版本。 template<class InputIterator, class OutputIterator> // ? 这里的 InputIterator 和 OutputIterator 都只是名称而已,哪里确保了它们真的至少是 InputIterator 和 O

2014-07-16 17:27:30 1113

原创 STL 源码剖析 算法 stl_numeric.h

描述、源码、示例version 1:普通操作版本version 2: 泛化操作版本1.accumulate描述:计算 init 和 [first, last) 内所有元素的总和源码://version 1template <class InputIterator, class T>T accumulate(InputIterator first, InputIterator last, T init) { for ( ; first != last; ++first) ini

2014-07-16 17:26:11 1199 1

原创 Effective C++ Item 48 认识 template 元编程

经验:Template metaprogramming (TMP, 模板元编程)可将工作由运行期移往编译期,因而得以实现早期错误侦测和更高的执行效率示例1:template<typename IterT, typename DistT>void advance(IterT &iter, DistT d){ if(typeid(typename std::iterator_traits<IterT>::iterator_catogory) == typeid(std::random_access_it

2014-07-16 09:32:52 849

原创 Effective C++ Item 47 请使用 traits classes 表现类型信息

经验:Traits classes 使得"类型相关信息"在编译期可用。它们以 templates 和 "templates 特化"完成实现示例:template<...>class deque{public: class iterator{ public: typedef random_access_iterator_tag iterator_category; };};//templatetemplate<typename IterT>struct iterator_trai

2014-07-15 08:33:00 886

原创 Effective C++ Item 45 运用成员函数模板接收所有兼容类型

经验:请使用 member function templates(成员函数模板)生成"可接受所有兼容类型"的函数示例:泛化 copy 构造函数temmplate<typename T>class SmartPtr{public: template<typename U> SmartPtr(const SmartPtr<U> &other) //member template, 为了生成 copy 构造函数 : heldPtr(other.get()){...} T *get() const

2014-07-15 08:31:15 814

原创 Effective C++ Item 44 将与参数无关的代码抽离 templates

经验:Templates 生成多个 classes 和多个函数,所以任何 template 代码都不该与某个造成膨胀的 template 参数产生相依关系因非类型模板参数(non-type template parameters) 而造成的代码膨胀,往往可消除,做法是以函数参数或 class 成员变量替换 template 参数示例:template<typename T, std::size_t> //size_t 是非类型模板参数class SquareMatrix{public: //

2014-07-15 08:29:01 908

原创 Effective C++ Item 39 明智而审慎地使用 private 继承

经验:private 继承意味 is-implemented-in-terms of。它通常比 composition 的级别低。但是当 derived class 需要访问 protected base class 的成员,或需要重新定义继承而来的 virtual 函数时,这么设计是合理的经验:和 composition 不同, private 继承可以造成 empty base 最优化。这对致力于“对象尺寸最小化”的程序库开发者而言,可能很重要示例1:虽是 Empty class,但却不仅要花

2014-07-15 08:27:41 816

原创 Effective C++ Item 35 考虑 virtual 函数以外的实现

1.virtual 函数版本class GameCharacter{public: virtual int healthValue() const; //返回人物的健康指数, derived classes 可重新定义它};2.使用 non-virtual interface 手法,那是 Template Method 设计模式的一种特殊形式。让客户通过 public non-virtual 成员函数间接调用 private virtual 函数class GameCharacter{pu

2014-07-15 08:25:36 891

原创 Effective C++ Item 46 需要类型转换时请为模板定义非成员函数

经验:当我们编写一个 class template, 而它所提供之"与此 template 相关的"函数支持"所有参数之隐式类型转换"时,请将那些函数定义为 "class template内部的 friend 函数"。示例:template<typename T>class Rational{public: Rational(const T &numerator = 0, const T &denominator = 1) // Item 20 对于自定义类型以passed by referenc

2014-07-14 09:06:41 889

原创 Effective C++ Item 43 学习处理模板化基类内的名称

经验:可在derived class templates 内通过 "this->" 指涉 base class templates 内的成员名称,或藉由一个明白写出的 "base class 资格修饰符"完成。示例:class CompanyA{public: //... void sendCleartext(const std::string &msg); void sendEncrypted(const std::string &msg); //...};class Company

2014-07-14 09:00:17 1046

原创 Effective C++ Item 42 了解 typename 的双重意义

经验:声明 template 参数时,前缀关键字 class 和 typename 可互换。请使用关键字 typename 标识嵌套从属类型名称;示例1:template<typename C>void print2nd(const C &container){ C::const_iterator *x;//歧义。如果const_iterator是个static成员变量,x是个global 变量,这里的 *就是乘 //...}示例2:template<typename C>void pr

2014-07-14 08:54:54 848

testtestest

testesatsetststesttetsttttttttttttttttttttttttttttttttttttt

2012-10-27

UNIX网络编程 卷1

 本书是一部UNIX网络编程的经典之作。附录中给出了测量各种IPC形式性能的方法。   本书内容详尽且具权威性,几乎每章都提供精选的习题,并提供了部分习题的答案,是网络研究和开发人员理想的参考书。

2012-08-13

浙江大学android公开课

浙江大学android公开课的一些讲义。对于学习android的同学很有帮助。。。。。

2011-10-05

Android中文合集(126+8篇)

Android中文翻译组是一个非盈利性质的开源组织,聚一批开发人员、大学生、研究生等Android爱好者,利用业余时间对Android相关的API及开发者指南等进行翻译,至今已超过200人报名参与,欢迎更多朋友加入,联系Mail:over140@gmail.com,关于翻译组的更多介绍,请看这里。 本合集包含126章节API和8章开发者指南

2011-10-05

Android最佳学习路线图

Android最佳学习路线图 Android最佳学习路线图 快速进入android的世界 快速进入android的世界

2011-09-04

java编程思想(第4版)

《Java编程思想(第4版)》以Java最新的版本JDK5.0为基础,在第3版的基础上,添加了最新的语言特性,并且对第3版的结构进行了调整,使得所有章节的安排更加遵照循序渐进的特点,同时每一章的内容在分量上也都更加均衡,这使读者能够更加容易地阅读本书并充分了解每章所讲述的内容。在这里我们再次向Bruce Eckel致敬,他不但向我们展示了什么样的书籍才是经典书籍,而且还展示了经典书籍怎样才能精益求精,长盛不衰。

2011-09-04

腾讯2005-2011年笔试题 部分含有答案

腾讯历年笔试题2005-2011年集合部分含有答案。题目很不错。祝愿大家找到好工作。

2011-07-16

操作系统概念课件ch03

高等教育出版社的操作系统经典恐龙书操作系统概念课件

2011-06-26

操作系统概念英文课件ch01

高等教育出版社的操作系统经典恐龙书第一章

2011-06-26

操作系统概念第七版答案(英文)

高等教育出版社 经典的操作系统恐龙书答案

2011-06-26

操作系统概念第六版习题答案(英文)

操作系统概念 第六版 高等教育出版社出版的 英文版答案

2011-06-26

空空如也

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

TA关注的人

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