Chúng ta sẽ xem khái niệm iterator hai chiều (bidirectional iterators) trong C++.
- Iterator hai chiều hỗ trợ tất cả tính năng của forward iterator, và thêm toán tử tiền tố và hậu tố giảm (--).
- Loại iterator này truy cập phần tử theo cả hai hướng: về phía cuối và về phía đầu.
- Random access iterator cũng là một loại bidirectional iterator.
- Bidirectional iterator có tính năng của forward iterator, khác duy nhất là có thể giảm (decrement).
Bidirectional iterator có các thuộc tính sau:
| Thuộc tính | Biểu thức |
|---|---|
| Bidirectional iterator có thể khởi tạo mặc định, gán sao chép, và hủy | A p A q(p) q = p |
| Có thể so sánh bằng toán tử bằng và khác nhau | p == q p != q |
| Có thể giải tham chiếu. Dùng toán tử * để lấy giá trị. | *p |
| Iterator có thể thay đổi (mutable) có thể giải tham chiếu như lvalue | *p = t |
| Có thể tăng/giảm dùng toán tử ++ và -- | p++ q-- |
Ví dụ Code
#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 << " ";
}
Kết quả
10 20 30 40 50 60 70 80 90 100 100 90 80 70 60 50 40 30 20 10