微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 算法与数据结构——迭代器模式

算法与数据结构——迭代器模式

时间:08-20 来源:ZLG致远电子 点击:

预期。

程序清单3.57  使用双向链表、算法和迭代器

在这里,使用了dlist_foreach()遍历函数,既然通过迭代器能够实现冒泡排序,那么也能通过迭代器实现简单的遍历算法,此时遍历算法与具体容器无关。遍历函数的原型如下:

其中,p_if表示算法使用的迭代器接口,begin与end表示算法需要处理的迭代器范围,visit是用户自定义的遍历迭代器的函数。其类型visit_t定义如下:

visit_t的参数是p_arg指针和it迭代器,其返回值为int类型的函数指针。每遍历一个结点均会调用visit指向的函数,传递给p_arg的值即为用户参数,其值为iter_foreach()函数的p_arg参数,p_arg的值完全是由用户决定的,传递给it迭代器的值即为指向当前遍历的迭代器,iter_foreach()函数的实现详见程序清单3.58。

程序清单3.58  遍历算法函数

现在可以将程序清单3.57中的第43行和第48行中的dlist_foreach()函数修改为使用iter_foreach()函数,看能否得到相同的效果?

如果将数据保存在数组变量中,那么将如何使用已有的冒泡排序算法呢?由于数组也是容器,因此只要实现基于数组的迭代器即可,详见程序清单3.59。

程序清单3.59 使用数组实现迭代器接口

基于新的迭代器,同样可以直接使用冒泡排序算法实现排序,详见程序清单3.60。

程序清单3.60  使用数组、算法和迭代器

由此可见,通过迭代器冒泡排序算法也得到了复用。如果算法库里有几百个函数,那么只要实现迭代器接口的2个函数即可,从而达到复用代码的目的。显然,迭代器是一种更灵活的遍历行为,它可以按任意顺序访问容器中的元素,而且不会暴露容器的内部结构。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top