ที่นี่เราจะดูแนวคิด Bidirectional iterators ใน C++
- Bidirectional iterators รองรับฟีเจอร์ของ forward iterators ทั้งหมด และรองรับ prefix/postfix decrement operators
- Iterator ประเภทนี้เข้าถึงสมาชิกได้ทั้งสองทิศทาง: ไปข้างหน้าและถอยหลัง
- Random access iterator ก็เป็นประเภทหนึ่งของ bidirectional iterator
- Bidirectional iterators มีฟีเจอร์ของ forward iterator แตกต่างตรงที่ decrement ได้
คุณสมบัติของ Bidirectional iterators:
| Property | Expression |
|---|---|
| Default-constructible, copy-assignable, destructible | A p; A q(p); q = p; |
| เปรียบเทียบได้ด้วย equality/inequality | p == q; p != q; |
| Dereference ได้ ใช้ * เพื่อดึงค่า | *p |
| Mutable iterator dereference เป็น lvalue ได้ | *p = t |
| Increment/decrement ด้วย ++ และ -- | p++; q--; |
ตัวอย่างโค้ด
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main() {
vector<int> vec{10,20,30,40,50,60,70,80,90,100};
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 << " ";
}
ผลลัพธ์
10 20 30 40 50 60 70 80 90 100 100 90 80 70 60 50 40 30 20 10