zoukankan      html  css  js  c++  java
  • 第十六章 string类和标准模板库(3.标准模板库之迭代器)

    模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。

    迭代器提供了遍历容器中值的通用表示。

    每个容器类都定义了相应的迭代器类型。

    STL描述了5种迭代器概念:

    ~输入和输出是相对于程序而言的,来自于容器的信息被视为输入;输出指将信息从程序传递给容器。

    ~输入迭代器:可以递增,但不能倒退,单向迭代器,单通行,用于只读算法;

    ~输出迭代器:类似于输入迭代器,单通行,用于只写算法;

    ~正向迭代器:正向迭代器递增后,仍然可以对前面的迭代器值解除引用,支持读和写;

    ~双向迭代器:双向迭代器支持正向迭代器的所有特性,还支持两种递减运算符;

    ~随机访问迭代器:支持双向迭代器的所有特性,同时支持随机访问的操作。

    在编写算法时尽可能使用最低要求的迭代器。

    常规指针是随机访问迭代器的模型。

    STL提供了一些预定义的迭代器(在头文件iterator中声明):

    1. ostream_iterator模板(输出迭代器概念的模型)

    ostream_iterator< int, char > out_iter( cout, " " ); //是一个适配器类,可以使用cout来显示信息

    第一个模板参数指出了被发送给数据流的数据类型,第二个模板参数指出了输出流使用的数据类型;

    构造函数的第一个参数指出了使用的输出流,第二个参数是发送给输出流的每个数据项后显示的分隔符。

    *out_iter++ = 15; //表示将15和空格组成的字符串发送到cout管理的输出流中。

    2. istream_iterator模板(输入迭代器概念的模型)

    istream_iterator<int, char> inr_iter(cin);

    3. reverse_iterator模板

    执行递增操作将导致递减。

    vector类成员函数rbegin()和rend()返回指向超尾和第一个元素的反向迭代器。

    反向指针先递减再解除引用,从而能够遍历反转概念的容器中的所有元素。

    4. 插入迭代器(输出迭代器概念的模型)

    insert_iterator模板:

    insert_iterator< vector<string> > pit( words, words.begin() ); //words是vector<string>类对象

    back_insert_iterator模板:只能用于在尾部快速插入的容器

    back_insert_iterator< vector<string> > pit( words); //words是vector<string>类对象

    front_insert_iterator模板:只能用于在起始位置做快速插入的容器

    front_insert_iterator< vector<string> > pit( words); //words是vector<string>类对象

  • 相关阅读:
    Android Fragment 解析和使用
    Android数据库表的创建和数据升级操作
    Android通过xml文件配置数据库
    Android上的事件流操作数据库
    Android SQLite的ORM接口实现(一)---findAll和find的实现
    Android注解编程的第一步---模仿ButterKnife的ViewBinder机制
    Android下拉刷新底部操作栏的隐藏问题
    Android开发总结
    一个ListView布局的不断演化
    SpringBoot入门-概念(一)
  • 原文地址:https://www.cnblogs.com/sungnox/p/7705155.html
Copyright © 2011-2022 走看看