STL是一种泛型编程。那么泛型编程与面向对象编程有什么不同呢?
泛型编程关注的是算法,而面向对象编程关注的编程的数据方面。共同点是,都通过抽象和创建可重用的代码,提升编程效率。但是两者的理念绝然不同。
为何使用迭代器?理解迭代器是理解STL的关键所在。
通常情况下,我们遍历数组是通过 p++,遍历链表是p = p->next,遍历二叉树,还分为p =
p->left,p = p->right;
我们对指针如何操作,取决于其存储的数据结构。而迭代器的作用,就是使这些操作独立于数
据结构。
模板使得算法,独立于数据类型;迭代器使得算法,独立于容器类型(数据结构)。成都创新互联是一家专业提供东乌珠穆沁企业网站建设,专注与成都网站设计、成都网站制作、外贸网站建设、HTML5、小程序制作等业务。10年已为东乌珠穆沁众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。主要思想以STL算法库(algorithm)中的find()函数举例。
泛型编程旨在使用同一个find函数,来处理vector、list或其他任何容器类型。即函数不仅独
立于数据类型,还独立于容器的数据结构。
所以要实现find函数,迭代器应具备那些特征呢?
即重载“ * ”、“ = ”、" == "、" != "、" p++ "、" ++p "运算符。
以List为例:
这样在List中,对指针的操作就和在vector中基本是一样的了。
(这里穿插一个概念,对于不同的容器,迭代器可能是指针,也可能是对象。)
为什么说是基本一样呢?
最后的差别在于,如何判断到达最后一个元素。vector通过判断是否遍历到了最后一个元素的下一个元素,使用了超尾迭代器。
而List则是通过判断最后一个结点中的next是否为空。
为了使迭代器的使用完相同,可以要求链表最后一个元素后面,还有一个额外的元素。(超尾元
素)。
这样使find函数在面对vector和List时,都在迭代器达到超尾位置时结束。
注意:这使得,超尾元素从对迭代器的要求,变成了对容器的要求。
STL为使通用算法能够适用于具体情况,应定义能够满足算法需求的迭代器,并要求把对迭代器的
部分要求,加到容器设计上。
-----本文摘自《C++ Prinmer Plus》第六版 553页
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧