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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP