<iterator>

std::bidirectional_iterator_tag

struct bidirectional_iterator_tag {}
雙向迭代器類別
用於標識迭代器為雙向迭代器的空類

雙向迭代器


雙向迭代器是可用於雙向(向末尾和向開頭)訪問範圍中元素序列的迭代器。

所有隨機訪問迭代器也是有效的雙向迭代器

不存在單一型別的雙向迭代器:每個容器都可以定義自己的特定迭代器型別,以便遍歷該容器並訪問其元素。

雙向迭代器具有與前向迭代器相同的屬性,唯一的區別是它們還可以被遞減。

屬性有效的表示式
可以預設構造複製構造複製賦值析構X a;
X b(a);
b = a;
可以使用相等/不等運算子進行等價比較
(當兩個迭代器值指向相同的底層序列時才有意義)。
a == b
a != b
可以作為右值解引用(如果處於可解引用狀態)。*a
a->m
對於可變迭代器非 const 迭代器
可以作為左值解引用(如果處於可解引用狀態)。
*a = t
可以遞增(如果處於可解引用狀態)。
結果是也可解引用越界迭代器。
兩個相等比較的迭代器,在都增加後仍保持相等比較。
++a
a++
*a++
可以遞減(如果其前面有一個可解引用的迭代器值)。
--a
a--
*a--
屬性有效的表示式
可以預設構造複製構造複製賦值析構X a;
X b(a);
b = a;
可以使用相等/不等運算子進行等價比較
(當兩個迭代器值指向相同的底層序列時才有意義)。
a == b
a != b
可以作為右值解引用(如果處於可解引用狀態)。*a
a->m
對於可變迭代器非 const 迭代器
可以作為左值解引用(如果處於可解引用狀態)。
*a = t
可以遞增(如果處於可解引用狀態)。
結果是也可解引用越界迭代器。
兩個相等比較的迭代器,在都增加後仍保持相等比較。
++a
a++
*a++
可以遞減(如果其前面有一個可解引用的迭代器值)。
--a
a--
*a--
左值是可交換的swap(a,b)

其中 X雙向迭代器型別ab 是此迭代器型別的物件,而 t 是由迭代器型別指向的型別(或可分配給由 X 型別物件解引用返回的左值)的物件。

常量迭代器 是不滿足輸出迭代器要求的迭代器;解引用它們會得到對常量元素的引用(例如 const T&)。

所有雙向迭代器也是有效的前向輸入迭代器。

另見