<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[onejian的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/onejian</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; onejian]]></copyright><item><title><![CDATA[STL list]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/20582571</link><guid>https://blog.youkuaiyun.com/onejian/article/details/20582571</guid><author>onejian</author><pubDate>Thu, 06 Mar 2014 00:34:34 +0800</pubDate><description><![CDATA[list的节点结构：
template 
struct __list_node {
  typedef void* void_pointer;
  void_pointer next;
  void_pointer prev;
  T data;
};


List不能像vector那样以普通的指针作为iterator，因为节点不能保证内存在空间上是连续的。
List是一个双]]></description><category></category></item><item><title><![CDATA[STL vector]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/20582433</link><guid>https://blog.youkuaiyun.com/onejian/article/details/20582433</guid><author>onejian</author><pubDate>Thu, 06 Mar 2014 00:33:14 +0800</pubDate><description><![CDATA[分析的是sgi STL中vector的版本 http://www.sgi.com/tech/stl/download.html 作为学习之用
基础（SGI STL的空间分配器）：
typedef __malloc_alloc_template malloc_alloc;
..
# ifdef __USE_MALLOC
typedef malloc_alloc alloc; //令allo]]></description><category></category></item><item><title><![CDATA[迭代器（Iterator）概念与traits编程技法]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/20581607</link><guid>https://blog.youkuaiyun.com/onejian/article/details/20581607</guid><author>onejian</author><pubDate>Thu, 06 Mar 2014 00:23:35 +0800</pubDate><description><![CDATA[Iterator是一种抽象的设计概念《Design Patterns》其中对于iterator模式定义如下：提供一种方法，使之能够依序讯访某个聚合物（容器）所包含的各个元素而又无需暴露该聚合物的内部表达方式。

STL的中心思想在于：将数据容器（containers）和算法（algorithms）分开彼此独立设计，最后再以一贴粘合剂将其撮合。这个粘合剂就是Iterator。

迭代器相应型]]></description><category></category></item><item><title><![CDATA[泛型编程基本概念]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/20581547</link><guid>https://blog.youkuaiyun.com/onejian/article/details/20581547</guid><author>onejian</author><pubDate>Thu, 06 Mar 2014 00:21:41 +0800</pubDate><description><![CDATA[Concept与Modeling：

Concept即非class也非function或者template,是抽象的，Modeling就是对应抽象的具体.
1. concept想象成一组type requirement,如果type T是concept T的一个model，必须满足C的所有条件
2. concept是所有type的集合，如果T是concept C的model，表示T隶属于C]]></description><category></category></item><item><title><![CDATA[Data语意学]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/20580925</link><guid>https://blog.youkuaiyun.com/onejian/article/details/20580925</guid><author>onejian</author><pubDate>Thu, 06 Mar 2014 00:16:23 +0800</pubDate><description><![CDATA[Data Member的内存布局：
前言知识：
C++ standard要求：同一个access section中，members的排列只需符合“较晚出现的members在class object中有较高的地址”，也就是members之间可能会出现边界调整的字节填充等。另外编译器还可能会合成内部一些使用的data members比如vptr，但是编译器会讲vptr放在什么位置呢？开头最后？不同]]></description><category></category></item><item><title><![CDATA[执行期语意学]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/20580853</link><guid>https://blog.youkuaiyun.com/onejian/article/details/20580853</guid><author>onejian</author><pubDate>Thu, 06 Mar 2014 00:15:41 +0800</pubDate><description><![CDATA[对象的构造和析构
讲解在以下几种情况下编译器是如何安插构造和析构函数？
1.全局对象
2.局部静态对象
3.数组对象
1）全局对象
Matrix g_identity;
main() {
Matrix m =  g_identity ;

}
c++保证了在main函数中第一次用到g_str之前，将g_str构造出来，在main()函数结束之前将g_str毁掉。
一个glo]]></description><category></category></item><item><title><![CDATA[构造函数语意学]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/20580785</link><guid>https://blog.youkuaiyun.com/onejian/article/details/20580785</guid><author>onejian</author><pubDate>Thu, 06 Mar 2014 00:14:44 +0800</pubDate><description><![CDATA[Default构造函数操作：
首先需要说明：


带来的第一个问题，编译器什么时候合成默认构造函数（nontrivial）？答案是编译器需要的时候，而不是程序需要的时候。
1）class Foo { public: Foo(); ...};
class Bar { public: Foo _foo; char* _str...};
void foo_bar() {

Bar ba]]></description><category></category></item><item><title><![CDATA[C++重载箭头操作符]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/17561039</link><guid>https://blog.youkuaiyun.com/onejian/article/details/17561039</guid><author>onejian</author><pubDate>Wed, 25 Dec 2013 19:10:11 +0800</pubDate><description><![CDATA[转载自>    #include   
    using namespace std;  
      
    class A{  
    public:  
        void action(){  
            cout << "Action in class A!" << endl;  
        }  
    };  
      
    class B{]]></description><category></category></item><item><title><![CDATA[new; operator new; placement new]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/17528579</link><guid>https://blog.youkuaiyun.com/onejian/article/details/17528579</guid><author>onejian</author><pubDate>Tue, 24 Dec 2013 14:04:23 +0800</pubDate><description><![CDATA[1. placement new的含义
placement new 是重载operator new 的一个标准、全局的版本，它不能够被自定义的版本代替（不像普通版本的operator new 和 operator delete能够被替换）。
void *operator new( size_t, void *p ) throw() { return p; }
placement new的执行]]></description><category></category></item><item><title><![CDATA[log4cplus解读]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/17484063</link><guid>https://blog.youkuaiyun.com/onejian/article/details/17484063</guid><author>onejian</author><pubDate>Sun, 22 Dec 2013 14:45:05 +0800</pubDate><description><![CDATA[参考：http://www.codeproject.com/Articles/15955/logging-made-easy-in-your-c-applications 

 http://log4cplus.sourceforge.net/docs/html/classlog4cplus_1_1spi_1_1BaseFactory.html





主要模块：Loggers，]]></description><category></category></item><item><title><![CDATA[抽象工厂模式]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/17484571</link><guid>https://blog.youkuaiyun.com/onejian/article/details/17484571</guid><author>onejian</author><pubDate>Sun, 22 Dec 2013 14:39:26 +0800</pubDate><description><![CDATA[转载自： http://blog.youkuaiyun.com/zhengzhb/article/details/7359385


定义：为创建一组相关或相互依赖的对象提供一个接口，而且无需指定他们的具体类。

类型：创建类模式
类图： 


抽象工厂模式与工厂方法模式的区别 
        抽象工厂模式是工厂方法模式的升级版本，他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的]]></description><category></category></item><item><title><![CDATA[工厂方法模式]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/17484565</link><guid>https://blog.youkuaiyun.com/onejian/article/details/17484565</guid><author>onejian</author><pubDate>Sun, 22 Dec 2013 14:38:03 +0800</pubDate><description><![CDATA[转载自： http://blog.youkuaiyun.com/zhengzhb/article/details/7348707

定义：定义一个用于创建对象的接口，让子类决定实例化哪一个类，工厂方法使一个类的实例化延迟到其子类。
类型：创建类模式
类图： 


工厂方法模式代码 


    interface IProduct {  
        public void produ]]></description><category></category></item><item><title><![CDATA[PIMPL机制学习]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/17484283</link><guid>https://blog.youkuaiyun.com/onejian/article/details/17484283</guid><author>onejian</author><pubDate>Sun, 22 Dec 2013 14:20:34 +0800</pubDate><description><![CDATA[pimpl 用法背后的思想是把客户与所有关于类的私有部分的知识隔离开。由于客户是依赖于类的头文件的，头文件中的任何变化都会影响客户，即使仅是对私有节或保护节的修改。pimpl用法隐藏了这些细节，方法是将私有数据和函数放入一个单独的类中，并保存在一个实现文件中，然后在头文件中对这个类进行前向声明并保存一个指向该实现类的指针。类的构造函数分配这个pimpl类，而析构函数则释放它。这样可以消除头文件与实]]></description><category></category></item><item><title><![CDATA[Auto_ptr和shared_ptr]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/17484153</link><guid>https://blog.youkuaiyun.com/onejian/article/details/17484153</guid><author>onejian</author><pubDate>Sun, 22 Dec 2013 14:01:58 +0800</pubDate><description><![CDATA[C++内存区划分相关的基础知识：(参考：《Exceptional C++》)Const Data: The const data area stores string literals and other data whose values are known at compile-time. No objects of class type can exist in this area。这部分数]]></description><category></category></item><item><title><![CDATA[C++编译，前置声明]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/17484045</link><guid>https://blog.youkuaiyun.com/onejian/article/details/17484045</guid><author>onejian</author><pubDate>Sun, 22 Dec 2013 13:33:35 +0800</pubDate><description><![CDATA[class A {
public:
    B b;
};
class B {
public:
    A a;
};


存在类嵌套的问题，编译无法通过。采用前置声明解决
class B;
class A {
public:
    B b;
};
class B {
public:
    A a;
};
以上代码还是错误的，因为在编译期间对于类的定义需]]></description><category></category></item><item><title><![CDATA[Dijkstra算法]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/9115381</link><guid>https://blog.youkuaiyun.com/onejian/article/details/9115381</guid><author>onejian</author><pubDate>Sun, 22 Dec 2013 13:31:19 +0800</pubDate><description><![CDATA[http://www.cnblogs.com/dolphin0520/archive/2011/08/26/2155202.html


 Dijkstra算法（单源最短路径）

      单源最短路径问题，即在图中求出给定顶点到其它任一顶点的最短路径。在弄清楚如何求算单源最短路径问题之前，必须弄清楚最短路径的最优子结构性质。

一.最短路径的最优子结构性质

   该性质描述]]></description><category></category></item><item><title><![CDATA[java 无知点]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/7980567</link><guid>https://blog.youkuaiyun.com/onejian/article/details/7980567</guid><author>onejian</author><pubDate>Sun, 22 Dec 2013 13:27:28 +0800</pubDate><description><![CDATA[Class对象：     
       每个class都有一个相应的Class对象。也就是说，当我们编写一个类，编译完成后，在生成的.class文件中，就会产生一个Class对象，用于表示这个类的类型信息。获取Class实例的三种方式：

（1）利用对象调用getClass()方法获取该对象的Class实例； 
（2）使用Class类的静态方法forName()，用类的名字获取一个Cla]]></description><category></category></item><item><title><![CDATA[vim常使用的命令]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/13504257</link><guid>https://blog.youkuaiyun.com/onejian/article/details/13504257</guid><author>onejian</author><pubDate>Sun, 22 Dec 2013 13:23:58 +0800</pubDate><description><![CDATA[VIM复制命令
y 复制，适用于选择文本后再按y复制
yw 复制一个单词（包括空格） ye 复制一个单词（不包括空格）
yy 复制一整行，类似dd删除一整行(包括行尾换行符）
Y 复制一整行（包括行尾换行符），不同于D删除到行尾（不包括换行符）
2yy 或 y2y 複製兩行

注：y为操作符，可加计数前缀，例如：2yw=y2w（复制两个单词）
p小写p代表贴至游标后（下）。 
P]]></description><category></category></item><item><title><![CDATA[Reactor与Proactor]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/9062061</link><guid>https://blog.youkuaiyun.com/onejian/article/details/9062061</guid><author>onejian</author><pubDate>Sun, 22 Dec 2013 13:22:27 +0800</pubDate><description><![CDATA[基础概念
同步：synchronous   ，两个或两个以上随时间变化的量在变化过程中保持一定的相对关系
异步：与同步相对，没有这样的相对关系
阻塞：指调用结果返回之前，当前线程会被挂起。
非阻塞：不能立刻得到结果之前，该函数不会阻塞当前线程，而会立刻返回。
对于IO同步，异步，阻塞，非阻塞的理解见博文http://blog.youkuaiyun.com/historyasamirror/artic]]></description><category></category></item><item><title><![CDATA[linux 网络编程的Epoll Select]]></title><link>https://blog.youkuaiyun.com/onejian/article/details/9061537</link><guid>https://blog.youkuaiyun.com/onejian/article/details/9061537</guid><author>onejian</author><pubDate>Sun, 22 Dec 2013 13:21:31 +0800</pubDate><description><![CDATA[select模型和Epoll的对比：
1）select模型有最大并发数限制，因为一个进程打开的FD是有限制的，（FD_SETSIZE默认为1024）。很多人提到增加FD_SETSIZE，这显然是不科学的。因为每一次调用select都会线性的扫描全部的FD集合，效率直线下降
2）epoll没有最大并发数限制，它所支持的FD上限是最大可以打开文件的数（一般与系统内存有关）。epoll只会遍历那些被]]></description><category></category></item></channel></rss>