迭代器基本概念
迭代器是一個“可遍歷STL容器全部或者部分元素”的對象(行爲類似於指針對象)
迭代器是用來表現容器中的某一個位置;迭代器依賴於容器,是由容器來提供的,也就是說,一般來講,容器裏邊迭代器。
迭代器的分類
分類依據:迭代器的移動特性,以及這個迭代器上能夠進行的操作;
迭代器行爲如指針到處跳,表示一個位置,我們一般分類是依據他的跳躍能力,每個分類是一個對應struct定義:
a、輸出型迭代器:
struct output_iterator_tag;
b、輸入型迭代器
struct input_iterator_tag;
c、前向迭代器
struct forward_iterator_tag;
d、雙向迭代器(bidirectional iterator)
struct bidirectional_iterator_tag;
e、隨機訪問迭代器(random access iterator)
struct random_access_iterator_tag;
繼承關係:
大多數容器中都有一個迭代器類型;並不是所有容器都有迭代器;比如:stack,queue這種容器就不提供迭代器。
完善迭代器能力
a、輸出型迭代器(struct output_iterator):一步一步能往前走,並且能夠通過這種迭代器來改寫容器數據;
b、輸入型迭代器(struct input iterator):以向前的方向讀取元素,按照這個順序一個一個返回元素。
c、前向迭代器(struct forward iterator):繼承自Input迭代器,因此它能向前的方向來讀取元素,並且讀取時提供額外保證。
d、雙向迭代器(bidirectional iterator):在前向迭代器基礎之上增加了往回(反向)迭代,也就是迭代位置可以回退,新增加如下操作:
e、隨機訪問迭代器(random access iterator):在雙向迭代器的基礎上又增加了所謂的隨機訪問能力。也就是增減某個偏移量能夠計算距離(因爲內存相連)