什么是迭代器?
先說說它是干嘛的吧!迭代器的作用是用來訪問容器(用來保存元素的資料結構)中的元素,所以使用迭代器,我們就可以訪問容器中里面的元素,沒錯!這和訪問陣列這個序列的指標一樣,因為陣列范圍內的指標就是迭代器的一種,
指標和迭代器有什么區別呢?
1.指標針是C語言里面就有的東西,而迭代器是C++里面才有的
2.指標用起來靈活,效率高,迭代器功能更豐富一些
3.指標通常用來訪問的是序列的元素,但不是所有的容器都會在連續的記憶體空間上保存資料,所以,對于這些容器我們不能單純地使用指標作為迭代器,而是針對每一種容器,都會有專門配對的迭代器,
4.指標用起來靈活,效率高,迭代器功能更豐富一些,c++的stl里面很多演算法都是基于迭代器的,一部分演算法的引數可以傳遞指標作為迭代器使用,

迭代器怎么使用?
對于所有的迭代器,它們的使用方法和指標一樣,比如自增(++),解參考(*),除了陣列以外,在大部分的容器中都會提供成員函式beget()(在類中創建,類是C++中對于C語言中的結構體的延伸),用來獲取容器開始位置的迭代器,會提供成員函式end(),用來獲取容器結束位置的迭代器,
如何理解beget()和end()這兩個迭代器?
beget()相當于陣列中首元素地址,end()相當于末元素后一位置的地址(首元素地址+元素數量)
迭代器五大種類及功能決議
InputIterator(輸入迭代器):只要求支持拷貝、自增和解引訪問,
OutputIterator(輸出迭代器):只要求支持拷貝、自增和解引賦值,
ForwardIterator(向前迭代器):同時滿足 InputIterator 和 OutputIterator 的要求,
BidirectionalIterator(雙向迭代器):在 ForwardIterator 的基礎上支持自減(即反向訪問),
RandomAccessIterator(隨機訪問迭代器):在 BidirectionalIterator 的基礎上支持加減運算和比較運算(即隨機訪問)

使用迭代器*樣例展示

vect<int>是一種資料結構—我們熟悉的陣列(亦稱串列)
用vect<int>::iterator定義迭代器iter
(迭代器的型別就為container::iterator)(container是某個STL容器)
arr.begin()是回傳值指向首元素的為迭代器的函式
更多有關迭代器的函式請看下一欄
常用四大回傳值為迭代器的函式
1.begin()/cbegin()
回傳指向首元素的迭代器,其中 *begin = front,
2.end()/cend()
回傳指向陣列尾端占位符的迭代器,注意尾端占位符是沒有元素的,不能進行解參考,
3.rbegin()/crbegin()
回傳指向逆向陣列的首元素的逆向迭代器,可以理解為正向容器的末元素,
4.rend()/crend()
回傳指向逆向陣列末元素后一位置的迭代器,對應容器首的前一個位置,沒有元素,
使用回傳值為迭代器的函式*樣例展示

sort()和reverse()都是STL提供的演算法函式
可以大大提高寫代碼的效率哦!
☆ 剛剛學習的迭代器,怕忘記所以來做的筆記,歡迎大家一起交流~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/392114.html
標籤:其他
上一篇:字串和轉義字符的知識和應用
下一篇:Mysql高級
