羌塘之风

重剑无锋,大巧不工。

导航

< 2025年7月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

统计

2013年11月12日 #

STL笔记:iterator

  在此总结下STL中iterator的实现:

  首先,STL中存在三类神器:容器,算法,迭代器。他们三者的关系是:算法通过迭代器操纵容器。这样有一个好处是算法的设计无需考虑具体的容器,只操纵迭代器就可以了。当我们需要自己设计一个算法,兼容STL中的容器,那么只需要在满足迭代器的种种规范下设计算法即可。反过来,当我们需要自己设计一个容器,并且这个容器兼容STL中的算法,这个容器只需要提供相应的满足种种规范的迭代器即可。

  所以迭代器的作用不言而喻:它是连接容器和算法的粘合剂。

  而话又说回来,既然容器中提供了迭代器,那么还需要单独设计出一个<iterator>干嘛?规范。无论是STL中已存在的容器和算法,或者是设计兼容STL的容器和算法,都需要满足这样一种规范,使二者能够完美的配合起来。

  一个迭代器,需要遵循如下的规范:指向的对象的类型value_type,两个迭代器之间的距离difference_type,指向对象的引用reference,指向对象的指针pointer,以及这个迭代器所采取的策略category_type。代码如下:

1 template<class category,class T,class distance=ptrdiff_t,class Pointer=T*,class Reference=T&>
2 struct iterator{
3     typedef category category_type;
4     typedef T value_type;
5     typedef distance difference_type;
6     typedef Pointer pointer;
7     typedef Reference    
8 };

对于迭代器采取的策略category_type,是这样理解的:

 

posted @ 2013-11-12 19:51 羌塘之风 阅读(203) 评论(0) 推荐(0)

2013年11月7日 #

STL笔记:traits编程

摘要: 最近在看stl源码剖析,其中遇到了traits技术,感觉很有意思,在此记录下来。 故事的开端是这样的,想实现一个函数,想让这个函数对其参数的类型做出相应的行为,而不是参数具体的值。比如,如果我想实现一个函数func(t),当参数t属于内置类型时,打印“I'm here”,当参数t属于自己已经定义或未来可能定义的类类型的类型时,打印“I'm not here”,该怎么实现它呢?也许函数重载是一种方法,不过对于每个类型都重载一次未免工作量有些偏大,而且当定义新的class时,还得为这个新添加的class再次定义一次func。 利用模板是一种不错的选择。不过对于模板来说,如何去实现不 阅读全文

posted @ 2013-11-07 17:40 羌塘之风 阅读(183) 评论(0) 推荐(0)

2013年11月4日 #

gvim安装随笔

摘要: 准备工作。在正式安装gvim前,首先需要安装一系列程序才可以,否则只能安装出来vim:1. sudo apt-get install build-essential2. sudo apt-get install ncurses-dev3. sudo apt-get install libgtk2.0-dev4. sudo apt-get build-dep vim-gtkwww.vim.org上下载最新的vim,并解压缩:tar xjvf vim-7.2.tar.bz2 。然后cd vim72。然后编译 ./configure --prefix=/usr/home/hitzzc --enabl 阅读全文

posted @ 2013-11-04 19:57 羌塘之风 阅读(230) 评论(0) 推荐(0)

2013年11月1日 #

智能指针

摘要: 今天总结下C++中智能指针的学习。 在类的数据成员中,如果存在指针成员,如果用此类定义两个对象A,B,当将A复制给B时,A中的指针成员的值将复制给B中对应的指针成员。这时出现一个问题就是,如果A中的指针成员指向的是堆中的变量,则在复制的过程中,将堆中的那个变量的地址复制给了B中相应的指针变量,如果此时对A中的指针成员进行delete释放堆中的变量,由于B并不知道堆中的变量已经被释放,所以此时B中的指针成员成为了悬浮指针,这时如果再对B中的指针变量进行delete,将引发灾难。。。。 好吧,语言表述能力太差,用个代码描述这个过程:#includeusing namespace std;c... 阅读全文

posted @ 2013-11-01 22:26 羌塘之风 阅读(185) 评论(0) 推荐(0)

重剑无锋,大巧不工

摘要: 一直就想通过写blog的方式,督促自己学习,进步,不过一直没有实施。希望从今天开始,改变!重剑无锋,大巧不工. 阅读全文

posted @ 2013-11-01 22:02 羌塘之风 阅读(160) 评论(0) 推荐(0)

点击右上角即可分享
微信分享提示