zoukankan      html  css  js  c++  java
  • 迭代器与指针

        在使用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

  • 相关阅读:
    java中Excel导出
    springmvc接收各种参数
    restTemplate使用
    java中io流的操作
    在线Cron表达式生成器
    springBoot实现socketio
    maven的使用
    idea中导入githup项目
    java 单例模式之线程安全的饿汉模式和懒汉模式
    spring定时任务的集中实现
  • 原文地址:https://www.cnblogs.com/buanxu/p/12756125.html
Copyright © 2011-2022 走看看