迭代器

作者: iamsonormal2333 | 来源:发表于2016-10-09 01:21 被阅读23次

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

  int * find_array(int * array, int n, const int value){
      for(int i=0;i<n;i++)
          if(array[i] == value) return &array[i];
      return 0;
  }

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

  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函数处理。
后面几篇简书准备再等深入的写迭代器

相关文章

  • 迭代器

    本节实验我们将为大家讲解迭代器,主要介绍 5 种常见迭代器:输入、输出迭代器,前向逆向迭代器,双向迭代器和随机迭代...

  • 迭代器与生成器

    迭代(iteration)与可迭代(iterable) 迭代器 迭代器协议(iterator protocol) ...

  • 10.迭代器与生成器

    一、迭代器 1). 迭代器概述 类比Java中的迭代器,参考迭代器模式https://www.jianshu.co...

  • 9 ES6 迭代器、生成器

    1、Iterator迭代器 ->遵循迭代模式思想实现,分为内部迭代器、外部迭代器,聚焦点:添加迭代接口 (1).迭...

  • C++boolan part3_week4

    1. 迭代器 1.1 迭代器的种类 使用随机访问迭代器的容器:array, vector,deque使用双向迭代器...

  • 迭代器模式

    内部迭代器和外部迭代器 简单地讲,内部迭代器就是类似 forEach 的迭代器,其内部迭代逻辑已经制定好,只要传入...

  • vector erase的用法

    正向迭代器: 反向迭代器:

  • 10 python中的迭代器和生成器

    1 迭代器 遵循了迭代器协议的对象为迭代器,即内部调用iter()方法转化成的对象为成迭代器。 1.1 迭代器的特...

  • 第7章迭代器模式

    第7章迭代器模式 7.1 jQuery中的迭代器 7.2 实现自己的迭代器 7.3 内部迭代和外部迭代 1内部迭代...

  • 我们来讲讲Python的迭代器

    迭代器 迭代器的作用:迭代器的作用就是迭代,可以让不是序列但是表现出序列行为,例如迭代字典的键,文件的行 迭代器的...

网友评论

    本文标题:迭代器

    本文链接:https://www.haomeiwen.com/subject/gzhpyttx.html