zoukankan      html  css  js  c++  java
  • 迭代器是神马东西

    一、迭代器用来干嘛的?

    本质是指针,用来遍历访问容器中元素的。

    STL实现了容器和算法的分离,如何实现的呢,答曰用类模板和函数模板,也可理解为所谓的泛化。那么容器和算法又是怎样结合在一起的呢,答曰迭代器——使用算法时,传给算法的是迭代器!

    二、迭代器常用运算。

    所有标准库容器的迭代器都提供*iter    iter->mem    ++iter   --iter    iter1 == iter2   iter1  !=  iter2等。

    但是只有vector和deque支持 iter + n  iter – n  iter1 += iter2   iter1 – iter2   和  关系运算符。

    从容器的存储方式上很好理解原因(连续 、 节点式/链式)。

    三、迭代器的种类。

    输入迭代器   输出迭代器   前向迭代器(slist)  双向迭代器(list)  随机访问迭代器(vector 、deque) 。

    从迭代器支持的运算,或者从容器的存储结构上理解。如slist单向链表——只允许访问下一个元素;vector连续存储,可以访问任意一个(++ 、-- 、 iter + n等)。

    四、为什么需要迭代器型别,如何实现迭代器型别的?

    通过上面分析,我们知道迭代器将容器和算法结合在一起,给算法一个迭代器,可以完成相应操作,如果算法需要知道迭代器所指对象的类型呢?

    我们想到用function template实现,但是如果返回值就要知道所指对象的型别,function template就不行了。

    然后想到用内嵌型别,即将迭代器定义为class type,将所指对象类型value_type作为迭代器类的成员。但是原生指针不是class type,而算法必须能够接受原生指针,怎么办?

    最终STL采用偏特化traits获取迭代器型别,即如果是原生指针,定义一个特化版本。

  • 相关阅读:
    轻配置 Vim
    PHP 使用 wkhtmltopdf/image 把HTML页面转换成 PDF/image 文件
    使用 Mailgun 实现 带附件的Email 发送功能
    LinkedIn 第三方登录(JavaScript SDK)
    react学习2
    前端面试题
    react学习
    前端面试-字符串-逆序-间隔
    前端文件上传相关知识
    js原型prototype问题
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3095970.html
Copyright © 2011-2022 走看看