迭代器與指針


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM