迭代器

在C++中,泛型编程时一个重要的特性。与面向对象不同的是,泛型编程关注的是算法。泛型编程旨在编写独立于数据类型的代码。在C++中,完成通用程序的工具是模版。当然,模版使得能够按泛型定义函数或类,而STL通过通用算法更近了一步。迭代器就是为了解决模版和设计协同工作的问题。
首先看一个在int数组中搜索特定值的函数。

  int * find_array(int * array, int n, const int value){
      for(int i=0;i

这是一个在数组中搜索特定值的函数。这个函数的局限性在于与一种特定数据结构(数组)关联起来。
再看一个在链表中搜索的情况。

  struct node{
      int item;
      node * next;
  };
  node *find_node(node * head,  const int value){
      node *start;
      for(start = head;  start !=0; start = start->next)
          if(start->item == val)return start;
      return 0;
  }

同样的,这种算法与链表关联在一起。
泛型编程旨在用同一个find方法解决所有的容器数据类型。模版提供了存储在容器中的数据类型的通用表示,因此还需要便利容器的值,迭代器正式这样的通用表示。
首先迭代器需要满足以下条件
1.需要对*p进行定义
2.需要对赋值运算符进行定义
3.需要对比较运算符进行定义
4.需要能便利容器中元素
这样可以重写这个函数

  typedef int * iterator;
  iterator find(iterator begin, iterator end, const int value){
      for(iterator i=begin; i!=end; i++)
          if(*i == val) return i;
      return end;
  }

实际上,STL遵循了这种方法。首先每个容器类定义了相应的迭代器类型。其次,每个迭代器都有一种超尾标记当迭代器超过一个最后一个元素时,这个值将被赋给迭代器。每个容器都有end和begin方法,分别指向第一个元素和超尾元素。
实际上,作为一种编程风格,最好避免直接使用迭代器,而尽量用STL函数处理。
后面几篇准备再等深入的写迭代器

你可能感兴趣的:(迭代器)