当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 学STL Iterator,traits笔记 最近看侯杰老师的《STL源码剖析》有一点收获,特把我对STL iterator设计的认识草草记录下来,大部分内容来自那本书(看原书更好)。
 

 

 ·中文内容properties文件的编辑    »显示摘要«
    摘要:http://propdev.sourceforge.jp/虽然是日本人编的,但还是比较好用,其实原理很简单,就是打开的时候转换一下,保存的时候转换一下。不过java也真是,直接使用xml做properties文件多好,不就没有这些问题了。另外这项功能应该是eclipse自带的功能,给它做一个feature request。 ......
 ·花生壳新手教程    »显示摘要«
    摘要:许多新手问到的问题,许多也许都太简单,大家都不愿意回答,或者是懒得回答,因为越是简单的问题就越难解释清楚。写这篇东东的原因是想让刚刚接触windows服务器的人或者是虽然使用了一段时间但仍然百思不得其解的朋友能对花生、对win server、对dns、对域名、对ip、对端口及其映射、对iis、对邮件服务器、对防火墙、对……,怎么要写那么多啊>>@_@<&l......


[原创]学STL Iterator,traits设计笔记

学stl iterator,traits笔记

一. iterator认识 【程序编程相关:微软即将在亚洲部分国家发布“视窗瘦身版”

最近看侯杰老师的«stl源码剖析»有一点收获,特把我对stl iterator设计的认识草草记录下来,大部分内容来自那本书(看原书更好).欢迎大家跟我讨论,里面也有问题希望您能提供宝贵看法! 【推荐阅读:嵌入式系统的构建

如果需要构造一组通用容器,提供一套统一的算法,构造底层数据结构类库,iterator的设计无疑是非常重要的.iterator可以方便容器元素的遍历,提供算法的统一参数接口.怎么说?首先,让我们考虑一个算法. 【扩展信息:设置端口映射使外网访问内网web

template <class t> ptrdiff_t

distance(t p1, t p2)

{

  //计算p1与p2之间的距离

}

显然这个函数是想计算两个“位置”之间距离.这里表示“位置”的类型t,可以是指向数组中某个元素的(原生)指针,可以是指向链表节点的指针,也可以是用来记录位置的任何对象(例如我们要谈的iterator).不管这两个位置是对应在数组,vector,链表或是其他任何容器,我们当然希望设计好的类库中最好只要一个这样的distance函数,而不需要每种容器都有不同的“位置”记录方式,从而导致需要很多个这样的distance算法.对,我们完全可以抽象出一种表示“位置”的概念,它像游标,像智能的指针,可以方便的遍历容器中的元素,记录位置,而不用管你作用的是什么类型的容器,这就是现在被容器设计者普遍接受的iterator概念.

二. stl iterator的设计:

为什么不用继承构造iterator?

容器抽象出5种iterator 类型,input<--forward<--bidrectional<--random access iterator加上output iterator,我们能不能通过refinement关系设计出具有继承关系的几个iterator类?然后各个容器的iterator类去继承这些基类.那么上面的disatance函数可以设计两个版本

ptrdiff_t distance(inputiterator p1, inputiterator p2)

{

 //inputiterator只能一个一个前进,例如链表

  ptrdiff_t n=0;

  while(p1 != p2)

  {

   ++p1; ++n;   

  }

  return n;

}

ptrdiff_t distance(randomaccessiterator p1, randomaccessiterator p2)

{

 //randomaccessiterator可以直接计算差距,例如数组,vector等

 return p2-p1;

}


...   下一页
    摘要:更改ie浏览器默认的源文件编辑器 用户在浏览网页时,如果在网页中单击鼠标右键并选择菜单中的“查看源文件”选项后,系统就会调用记事本打开该网页的html源文件,用户可以通过修改注册表来更改默认的打开程序,然后如下: 一:打开注册表。 “开始”菜单->“运行”->输入 regedit 然后点确定。 二:打开hkey_l......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE