zoukankan      html  css  js  c++  java
  • C++ Iterator迭代器介绍及Iterator迭代器用法代码举例

    C++ Iterator迭代器介绍

        迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下:

    迭代器 描述 

    input_iterator 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。

    output_iterator 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。

    forward_iterator 可向前移动的,同时具有读写功能的迭代器。同时具有input和output迭代器的功能,并可对迭代器的值进行储存。

    bidirectional_iterator 双向迭代器,同时提供读写功能,同forward迭代器,但可用来进行增加(++)或减少(--)操作。

    random_iterator 随机迭代器,提供随机读写功能.是功能最强大的迭代器, 具有双向迭代器的全部功能,同时实现指针般的算术与比较运算。

    reverse_iterator  如同随机迭代器或双向迭代器,但其移动是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)

        vector容器类就有一个random-access随机迭代器,这也意味着其可以使用随机读写的算法。既然随机迭代器具有全部其它迭代器的特性,这也就是说为其它迭代器设计的算法也可被用在vector容器上。

       C++ Iterator迭代器操作举例

     (本文由www.169it.com收集整理)

    (1) 每种容器类型都定义了自己的迭代器类型,如vector:

    1
    vector<int>::iterator iter; //这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型。

    (2) 使用迭代器读取vector中的每一个元素:

    1
    2
    3
    4
    5
    6
    vector<int> ivec(10,1);
    for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
    {
    *iter=2; //使用 * 访问迭代器所指向的元素
    }
    const_iterator:

    只能读取容器中的元素,而不能修改。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(vector<int>::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)
    {
    cout<<*citer;
    //*citer=3; error
    }
    vector<int>::const_iterator 和 const vector<int>::iterator的区别
    const vector<int>::iterator newiter=ivec.begin();
    *newiter=11; //可以修改指向容器的元素
    //newiter++; //迭代器本身不能被修改

    (3) iterator的算术操作:

    iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.

    1
    2
    3
    const vector<int>::iterator newiter=ivec.begin();
    vector<int>::iterator newiter2=ivec.end();
    cout<<"\n"<<newiter2-newiter;

     一个很典型使用vector的STL代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <vector>
     #include <iostream> 
     using namespace std; 
     int main() 
    {
     vector<int> ivec;
     ivec.push_back(1);
     ivec.push_back(2);
     ivec.push_back(3);
     ivec.push_back(4); 
     for(vector<int>::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)
     cout << *iter << endl;
     }

    如下代码对vector容器对象生成和使用了迭代器:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    vector<int> the_vector;
      vector<int>::iterator the_iterator;
      forint i=0; i < 10; i++ )
        the_vector.push_back(i);
      int total = 0;
      the_iterator = the_vector.begin();
      while( the_iterator != the_vector.end() ) {
        total += *the_iterator;
        the_iterator++;
      }
      cout << "Total=" << total << endl;

    提示:通过对一个迭代器的解引用操作(*),可以访问到容器所包含的元素。

    文章转载自:[169IT-最新最全的IT资讯]
    本文标题:C++ Iterator迭代器介绍及Iterator迭代器用法代码举例

  • 相关阅读:
    [转]如何避免外发邮件被误判为垃圾邮件
    [转]php判断一个数组是另一个数组的子集
    [转]Linux下Nagios的安装与配置
    [转]MySQL事务学习-->隔离级别
    [转]最完美解决Nginx部署ThinkPHP项目的办法
    [转]Redis作者:深度剖析Redis持久化
    Html、Asp、Php、Jsp禁止页面缓存
    JS模板引擎
    HTTPS安全证书介绍
    PHP Curl实例
  • 原文地址:https://www.cnblogs.com/besty/p/4039264.html
Copyright © 2011-2022 走看看