C++ 雙向迭代器


能夠從兩個方向(從開頭和結尾)訪問範圍內的元素序列的迭代器稱為雙向迭代器。迭代器可以作用於列表、對映和集合等資料型別。

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

屬性有效表示式
可預設構造、
可複製構造、
可複製賦值和可析構
X a;
X b(a);
b = a;
可以使用相等/不相等運算子比較是否相等(當兩個迭代器值都遍歷相同的底層序列時才有意義)。a == b
a != b
可以作為右值解引用(如果處於可解引用狀態)。*a
a->m
對於可變迭代器(非常量迭代器):可以作為左值解引用(如果處於可解引用狀態)。*a = t
可以遞增(如果處於可解引用狀態)。結果要麼也是可解引用的,要麼是超出末尾的迭代器。兩個比較相等的迭代器在都遞增後仍然保持相等。++a
a++
*a++
可以遞減(如果存在一個可解引用的迭代器值在其之前)。--a
a--
*a--
左值可以交換。swap(a,b)

其中 X 是一個雙向迭代器,a 和 b 是此迭代器型別的物件,t 是迭代器型別指向的型別(或其他可以賦值給解引用 X 型別物件返回的左值)的物件。

C++ 中雙向迭代器的概念。

  • 雙向迭代器支援前向迭代器的所有功能,以及字首和字尾遞減運算子。

  • 這種型別的迭代器可以雙向訪問元素,例如向後和向前。

  • 隨機訪問迭代器也是一種雙向迭代器。

  • 雙向迭代器具有前向迭代器的特性,但唯一的區別是此迭代器還可以遞減。

Input: 1 2 3 4 5 6 7 8 9 10
Output: 10 9 8 7 6 5 4 3 2 1

示例

#include <iostream>
#include<iterator>
#include<vector>
using namespace std;
int main() {
   vector<int> vec{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
   vector<int> ::iterator it;
   vector<int> :: reverse_iterator rev_it;
   for(it = vec.begin(); it != vec.end(); it++)
      cout<<*it<<" ";
      cout<< endl;
   for(rev_it = vec.rbegin(); rev_it!= vec.rend(); rev_it++)
      cout<<*rev_it<<" ";
}

輸出

1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1

更新於: 2019-08-19

215 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.