STL迭代器簡介

2021-08-21 17:08:13 字數 2230 閱讀 5291

stl將容器(containers)和演算法(algorithms)分隔開,兩者之間的紐帶就在於迭代器(iterators)。

迭代器也是一種智慧型指標,過載了例如常見的operator*以及operator->

迭代器有常見的五種相應型別:

iterator_category

value_type

difference_type

pointer

reference

假設迭代器有:ite,ite2:

1.value_type: 迭代器所指物件的型別,假設ite是乙個mutable iterator,則*ite返回的型別就是value_type

2.reference:迭代器所指物件的引用型別,假設ite是乙個const iterator,則*ite返回的型別就是reference

2.difference_type: 兩個同型別迭代器之間的距離,例如ite-ite2

3.pointer:operator->返回的型別。

4.iterator_category: 迭代器的分類。

iterator_category有五種,分別是:

input iterator(輸入迭代器)

output iterator(輸出迭代器)

forward

iterator(前向迭代器)

bidirectional iterator(雙向迭代器)

random access iterator(隨機訪問迭代器)

這五種迭代器的關係並不是完全的繼承關係,而是繼承中帶叢屬的關係:

struct input_iterator_tag {};

struct output_iterator_tag {};

struct forward_iterator_tag : public input_iterator_tag {};

struct bidirectional_iterator_tag : public forward_iterator_tag {};

struct random_access_iterator_tag : public bidirectional_iterator_tag {};

輸入/輸出/前向迭代器支援的操作符過載有:

operator*,operator++,operator==,operator!=,operator->
雙向迭代器在上述的基礎上還支援:

operator--
隨機訪問迭代器在雙向迭代器的基礎上還支援:

operator

<, operator, operator+=, operator-=

各個容器的迭代器型別:

-vector:隨機訪問迭代器,本質是t*,尤其要注意支援operator<operator,因此經常可以看到這樣訪問vector:

vector

vec(10);

for(int i = 0; i < 10; ++i)

for(auto ite = vec.begin(); ite < vec.end(); ++ite)

list

li(10);

for(int i = 0; i < 10; ++i)

for(auto ite = vec.begin(); ite < vec.end(); ++ite)

hash_seths;

//some init

...for(auto ite = hs.end() - 1; ite != ite.begin(); --ite)

STL迭代器簡介

stl迭代器簡介 標準模板庫 the standard template library,stl 定義了五種迭代器。下面的圖表畫出了這幾種 input output forward bidirectional random access 要注意,上面這圖表並不是表明它們之間的繼承關係 而只是描述了迭...

STL容器簡介以及迭代器介紹

容器 container 是用於存放資料的類模板。在使用容器時,即將容器類模板例項化為容器類時,會指明容器中存放的元素是什麼型別的。在容器中,可以存放基本型別的變數,也可以存放物件,而物件或基本型別的變數被插入容器中時,實際插入的是物件或變數的乙個複製品。容器分為兩大類,順序容器和關聯容器。順序容器...

迭代器簡介

迭代器提供了比下標操作更通用的遍歷容器雷元素的方法。其對所有的容器都適用,現代c 程式更加傾向於適用迭代器而不是下標操作。迭代器測試 vector iterator begin v3.begin 指向容器的第乙個元素 vector iterator end v3.end z指向容器末端元素的下乙個 ...