<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[——]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/losophy</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; losophy]]></copyright><item><title><![CDATA[2019/4/13]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/89278973</link><guid>https://blog.youkuaiyun.com/losophy/article/details/89278973</guid><author>losophy</author><pubDate>Sat, 13 Apr 2019 10:42:17 +0800</pubDate><description><![CDATA[先看书。

]]></description><category></category></item><item><title><![CDATA[2019/4/12]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/89262781</link><guid>https://blog.youkuaiyun.com/losophy/article/details/89262781</guid><author>losophy</author><pubDate>Fri, 12 Apr 2019 23:01:21 +0800</pubDate><description><![CDATA[做一下自己一直想做的事。
]]></description><category></category></item><item><title><![CDATA[STL源码分析：Iterators]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/79624088</link><guid>https://blog.youkuaiyun.com/losophy/article/details/79624088</guid><author>losophy</author><pubDate>Fri, 17 Aug 2018 17:28:41 +0800</pubDate><description><![CDATA[《设计模式》中Iterator模式定义为：提供一种方法，使之能够依序巡访某个聚合物（容器）所含的各个元素，而又无需暴露该聚合物的内部表述方式。

智能指针

迭代器是一种行为类似指针人对象。而指针的各种行为中最常见也最重要的便是内容提领(*)和成员访问(-&amp;gt;)，迭代器最重要的编程工作就是对这两个操作进行重载工作。

Traits编程技法（STL源代码门钥）

Traits就像一台“特性萃取机...]]></description><category></category></item><item><title><![CDATA[STL源码分析：Containers]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/79625370</link><guid>https://blog.youkuaiyun.com/losophy/article/details/79625370</guid><author>losophy</author><pubDate>Fri, 17 Aug 2018 17:27:57 +0800</pubDate><description><![CDATA[STL容器分两种：序列式容器，关联式容器。



上图以内缩方式来表达基层与衍生层的关系。

heap内含一个vector，priority-queue内含一个heap、stack和queue都含一个deque，set/map/multiset/multimap都内含一个RB-tree，hash_x都内含一个hastable。

 

序列式容器

所谓序列式容器，其中的元素都可序(ordered...]]></description><category></category></item><item><title><![CDATA[skynet源码分析：模块]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/79577665</link><guid>https://blog.youkuaiyun.com/losophy/article/details/79577665</guid><author>losophy</author><pubDate>Tue, 03 Jul 2018 10:31:03 +0800</pubDate><description><![CDATA[skynet各层表现skynet重要模块和服务gate.so：为整个skynet提供socket功能snlua.so：启动多个lua服务skynet自带的模块中有一个重要的模块是snlua.so模块，通过snlua.so和指定lua脚本文件可以启动多个lua编写的服务，不用每个服务都是用c来编写，而且大部分逻辑都是在 lua 脚本下开发，只有需要考虑性能的模块才用 C 语言开发成库，直接提供给 l...]]></description><category></category></item><item><title><![CDATA[homebrew简单介绍]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/52562061</link><guid>https://blog.youkuaiyun.com/losophy/article/details/52562061</guid><author>losophy</author><pubDate>Sat, 17 Sep 2016 11:06:30 +0800</pubDate><description><![CDATA[用过linux都会记得apt-get,yum这些工具。
而在mac上，homebrew相当于这些工具。

Homebrew的安装
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrew使用

搜索软件：brew search 软件名，如brew]]></description><category></category></item><item><title><![CDATA[排序：一些排序的总结]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51791501</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51791501</guid><author>losophy</author><pubDate>Fri, 01 Jul 2016 09:43:51 +0800</pubDate><description><![CDATA[稳定性
所谓稳定排序，就是相等的两个数，排序前是什么顺序，排序后也是什么顺序。比如a=1,b=3,c=1，a，b，c这3个数进行排序，a本来在c前面，如果能保证排序后，a还是在c前面，就是稳定排序，否则就是不稳定排序。


内外排序
我们一般提到排序都是指内排序，比如快速排序，堆排序，归并排序等，所谓内排序就是可以在内存中完成的排序。RAM的访问速度大约是磁盘的25万倍，我们当然希望如果]]></description><category></category></item><item><title><![CDATA[STL源码分析：泛型编程与STL]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51783329</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51783329</guid><author>losophy</author><pubDate>Thu, 30 Jun 2016 10:26:42 +0800</pubDate><description><![CDATA[定义抽象的concepts，并根据抽象的concepts来撰写算法与数据结构，是泛型编程的本质。运用STL时的几个最重要的观念：1.所谓使用STL，就是去扩充它。2.STL的算法和容器是独立分离的。3.无须继承。4.抽象化并不意味效率低。STL所实现的，是依据泛型思维架设起来的一个概念结构。这个以抽象概念为主体而非以实际类为主体的结构，形成了一个严谨的接口标准。在此接口下，任何组件都有最大的独立性...]]></description><category></category></item><item><title><![CDATA[树：红黑树]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51745151</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51745151</guid><author>losophy</author><pubDate>Thu, 23 Jun 2016 17:24:10 +0800</pubDate><description><![CDATA[红黑树（Red Black Tree） 是一种自平衡二叉查找树，是在计算机科学中用到的一种数据结构，典型的用途是实现关联数组。


红黑树和AVL树类似，都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡，从而获得较高的查找性能。



它虽然是复杂的，但它的最坏情况运行时间也是非常良好的，并且在实践中是高效的： 它可以在O(log n)时间内做查找，插入和删除，这里的n 是]]></description><category></category></item><item><title><![CDATA[树：B树、B+树、B*树]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51744369</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51744369</guid><author>losophy</author><pubDate>Thu, 23 Jun 2016 17:01:35 +0800</pubDate><description><![CDATA[B树

B-tree树即B树，B即Balanced，平衡的意思。因为B树的原英文名称为B-tree，而国内很多人喜欢把B-tree译作B-树，其实，这是个非常不好的直译，很容易让人产生误解。如人们可能会以为B-树是一种树，而B树又是另一种树。而事实上是，B-tree就是指的B树。


B树是主磁盘或其他直接存储辅助存储设备而设计的一种平衡查找树，B树与红黑树类似。但在降低磁盘I/O操作次]]></description><category></category></item><item><title><![CDATA[树：Trie树]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51743128</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51743128</guid><author>losophy</author><pubDate>Thu, 23 Jun 2016 14:34:13 +0800</pubDate><description><![CDATA[Trie树，又称单词查找树，Trie树，是一种树形结构，是一种哈希树的变种。
典型应用是用于统计，排序和保存大量的字符串（但不仅限于字符串），所以经常被搜索引擎系统用于文本词频统计。它的优点是：利用字符串的公共前缀来减少查询时间，最大限度地减少无谓的字符串比较，查询效率比哈希树高。

补充下，trie也可以用于做基于词典的敏感词检测。还有就是适合路由时ip地址的最长前缀匹配。



]]></description><category></category></item><item><title><![CDATA[树：伸展树]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51741691</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51741691</guid><author>losophy</author><pubDate>Thu, 23 Jun 2016 11:08:42 +0800</pubDate><description><![CDATA[我们知道AVL树为了保持严格的平衡，所以在数据插入上会呈现过多的旋转，影响了插入和删除的性能，此时AVL的一个变种，伸展树（Splay）就应运而生了，我们知道万事万物都遵循一个“八二原则“，也就是说80%的人只会用到20%的数据，比如说我们的“xx输入法”，平常打的字也就那么多，或许还没有20%呢。


在伸展树上的一般操作都基于伸展操作：假设想要对一个二叉查找树执行一系列的查找操作，为了使]]></description><category></category></item><item><title><![CDATA[树：Treap树]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51741331</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51741331</guid><author>losophy</author><pubDate>Thu, 23 Jun 2016 10:42:50 +0800</pubDate><description><![CDATA[我们知道，二叉查找树相对来说比较容易形成最坏的链表情况，所以前辈们想尽了各种优化策略，包括AVL，红黑，以及今天要讲的Treap树。
Treap树是什么？

treap是heap和tree结合，中文名叫树堆。
首先它每个节点有2个值value和weight，其中只看weight的话，满足heap二叉堆的特性(父亲比儿子都小/大)，只看value的话，满足排序二叉树特性(以左儿子为根的子树元]]></description><category></category></item><item><title><![CDATA[树：AVL树]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51735892</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51735892</guid><author>losophy</author><pubDate>Wed, 22 Jun 2016 18:30:24 +0800</pubDate><description><![CDATA[AVL树得名于它的发明者。
AVL树是带有平衡条件的二叉查找树。这个平衡条件必须要容易保持，而且它须保证树的深度是O(logN)。
查找、插入和删除在平均和最坏情况下都是O（log n）。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。

AVL树本质上还是一棵二叉搜索树（因此读者可以看到我后面的代码是继承自二叉搜索树的），它的特点是：
1. 本身首先是一棵二叉搜索树。 
2.]]></description><category></category></item><item><title><![CDATA[c++对象模型研究7：站在对象模型的顶端]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51726780</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51726780</guid><author>losophy</author><pubDate>Tue, 21 Jun 2016 14:44:44 +0800</pubDate><description><![CDATA[template

在C++发明阶段，C++之父Stroustrup和贝尔实验室的C++小组对原先的宏方法进行了修订，对其进行了简化并将它从预处理范围移入了编译器。这种新的代码替换装置被称为模板，而且它变现了完全不同的代码重用方法：模板对源代码重用，而不是通过继承和组合重用对象代码。当用户使用模板时，参数由编译器来替换，这非常像原来的宏方法，却更清晰，更容易使用。



未使用的tem]]></description><category></category></item><item><title><![CDATA[c++对象模型研究6：执行期]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51722148</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51722148</guid><author>losophy</author><pubDate>Mon, 20 Jun 2016 20:23:33 +0800</pubDate><description><![CDATA[C++的一件困难事情：不太容易从程序代码看出表达式的复杂度。
执行期语意学，即在程序执行时，编译器产生而外的指令调用，确保对象的构造，内存的释放，以及类型转换与临时对象的生成的安全进行。



对象的构造和析构
一般而言，我们会把对象尽可能放置在使用它的那个程序区段附近，这样做可以节省不必要的对象产生操作和摧毁操作（主要是析构）。不建议把所有的对象放在函数或某个区段的起始处。]]></description><category></category></item><item><title><![CDATA[c++对象模型研究3：数据]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51689930</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51689930</guid><author>losophy</author><pubDate>Thu, 16 Jun 2016 12:01:35 +0800</pubDate><description><![CDATA[开始前先看看
class X {};
class Y:public virtual X {};
class Z:public virtual X {};
class A:public Y,public Z {};
上述X，Y，Z，A中没有任何一个class内含明显的数据，其间只表示了继承关系。
按照书上的例子
sizeof X = 1
sizeof Y = 8
sizeof Z = 8
s]]></description><category></category></item><item><title><![CDATA[c++对象模型研究2：构造函数]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51673302</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51673302</guid><author>losophy</author><pubDate>Wed, 15 Jun 2016 11:39:09 +0800</pubDate><description><![CDATA[关键词explicit之所以被导入这个语言，就是为了提供给程序员一种方法，使他们能够制止“单一参数的构造函数”被当做一个转换运算符。

默认构造函数的构建操作

以下四种情况类会被生成“有用的”默认构造函数
a.一个带有默认构造函数的成员对象类
  合成的默认构造函数是以inline的方式完成的，如果函数太复杂则会做成非inline的static实体
b.带有默认构造函数的基类]]></description><category></category></item><item><title><![CDATA[c++对象模型研究1：关于对象]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51669720</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51669720</guid><author>losophy</author><pubDate>Tue, 14 Jun 2016 14:55:55 +0800</pubDate><description><![CDATA[关于对象
C++在布局以及存取时间上主要的额外负担是由virtual引起，包括
1.虚函数机制（执行时绑定）
2.虚基类。还有一些多重继承下的额外负担。


C++对象模式
在C++中，有两种类成员数据：static和非static，以及三种类成员函数：static、非static和virtual。
在C++对象模型中，非static成员数据被配置于每一个类对象之内，static成]]></description><category></category></item><item><title><![CDATA[有效使用STL的经验]]></title><link>https://blog.youkuaiyun.com/losophy/article/details/51645918</link><guid>https://blog.youkuaiyun.com/losophy/article/details/51645918</guid><author>losophy</author><pubDate>Sun, 12 Jun 2016 14:51:40 +0800</pubDate><description><![CDATA[摘自《effective stl》
关于STL的使用原则，以后还会再补充。


容器
条款1：仔细选择你的容器



条款2：小心对“容器无关代码”的幻想



条款3：使容器里对象的拷贝操作轻量而正确




条款4：用empty来代替检查size()是否为0


条款5：尽量使用区间成员函数代替它们的单元素兄弟




条款6：警惕C++最令]]></description><category></category></item></channel></rss>