• 迭代器与指针


        在使用vector、map等容器的迭代器的时候,常常会与指针弄混(注意,容器适配器 stack、queue 和 priority_queue 没有迭代器,可以使用这些容器自带的成员函数

    来对元素进行访问),因为他们的一些使用方法有些类似,还是举个例子:

        vector<int> v; //先声明一个vector容器

        vector<int>iterator ::iter;   //声明vector容器的迭代器,但此时iter并没有指向vector容器v

        iter=v.begin();    //让迭代器iter指向v的头部,即v中第一个元素

        通过上面几条语句,让iter指向了v,就可以用迭代器iter来访问v中的元素或者遍历v了。方法就是用 * 操作符,即 *iter,此时*iter就是迭代器当前所指向的元素位置的值,

    然后可以通过自增 ++、自减 - - 来改变迭代器的位置,从而可以访问不同的元素,有点类似于指针,但是二者也有较大区别,下面会列举出他们的主要区别:

    迭代器:  1. 首先迭代器它不是指针,而是类模板,只是表现得像指针而已,就像上面的例子中那样。迭代器它模拟了指针的一些功能,通过重载  ‘—>’、'*'、

                        ‘++’、‘- -’(反向迭代器) 这些操作符(还有其他的一些操作符),封装了指针,提供了比指针更强大的功能,可以看作是智能指针。

                    2. 迭代器与指针还有一个较大区别就是迭代器返回的是对象的引用,而不是对象的值,所以cout只能输出迭代器使用 * 取对象值后的值,而不能直接

                        输出其自身。

                    3. 还有一点就是迭代器在使用过后就是释放了,不能再继续使用,而指针则可以继续使用。 

    指针:  1. 指针可以指向函数,迭代器就不可以,迭代器只能指向容器。

                 2. 指针是迭代器的一种,只能用于某些特定的容器,比如数组、结构体。

                 3. 迭代器是指针的抽象和泛化,指针它满足迭代器的一切要求,但是二者还是有很大差别的。

    有关迭代器的常用操作以及更多用法可以看看下面这几个链接,写的都非常好,最好都看一下互相补充。

      http://c.biancheng.net/view/338.html

      https://www.cnblogs.com/leijiangtao/p/12057113.html

      https://www.cnblogs.com/leijiangtao/p/12057113.html

  • 相关阅读:
    Bootstrap UI层收藏介绍
    你为什么离开上家公司?三大经典面试问题剖析
    浅谈常用的Web安全技术手段
    C#中yield关键字理解
    中小型研发团队架构实践三要点(转自原携程架构师张辉清)
    你确实应该学习并使用的 10 个 C# 特性
    ASP.NET MVC 异步Excel数据选择导出
    表格中控制tr的display:block在火狐中显示错乱的解决方法
    切图笔记
    表单验证jquery.validate
  • 原文地址:https://www.cnblogs.com/buanxu/p/12756125.html
Copyright © 2020-2023  润新知