c++ primer plus 第16章string 类和标准模板库, 泛型编程----为何使用迭代器

c++ primer plus 第16章string 类和标准模板库, 泛型编程----为何使用迭代器

c++ primer plus 第16章string 类和标准模板库, 泛型编程----为何使用迭代器


泛型编程16.4

有了一些使用 STL的经验后,来看一看底层理念。STL是一种泛型编程(generic programming)。面向对象编程关注的是编程的数据方面,而泛型编程关注的是算法。它们之间的共同点是抽象和创建可重用代码,但它们的理念绝然不同。
泛型编程旨在编写独立于数据类型的代码。在 C++中,完成通用程序的工具是模板。当然,模板使得能够按泛型定义函数或类,而 STL通过通用算法更进了一步。模板让这一切成为可能,但必须对元素进行仔细地设计。为解模板和设计是如何协同工作的,来看一看需要迭代器的原因。

16.4.1 为何使用迭代器

理解迭代器是理解 STL的关键所在。模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。因此,它们都是STL通用方法的重要组成部分。
为了解为何需要迭代器,我们来看如何为两种不同数据表示实现 find函数,然后来看如何推广这种方法。首先看一个在 double数组中搜索特定值的函数,可以这样编写该函数:

double *find_ar(double*ar,int n,const double & val)
{
   
	for (int i=0;i < n; i++)
		if (ar[i]== val)
		return &ar[i];
	return 0;//or,in C++1l,return nullptr;
}

如果函数在数组中找到这样的值,则返回该值在数组中的地址,否则返回一个空指针。该函数使用下标来遍历数组。可以用模板将这种算法推广到包含==运算符的、任意类型的数组。尽管如此,这种算法仍然与一种特定的数据结构(数组)关联在一起。
下面来看搜索另一种数据结构–链表的情况(第12章使用链表实现了Queue类)。链表由链接在一起的 Node 结构组成:

struct Node
{
   
    double item;
    Node *p_next;
}

假设有一个指向链表第一个节点的指针,每个节点的pnext指针都指向下一个节点,链表最后一个节点的pnext指针被设置为0,则可以这样编写findll()函数:

Node* find 1l(Node *head,const double & val)
{
   
	Node *start;
	for(start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值