crbegin() và crend() cung cấp const_reverse_iterator để duyệt list ngược (từ cuối về đầu) chỉ đọc.
crbegin()
- Trả về const_reverse_iterator trỏ đến phần tử cuối (reverse begin)
- Cú pháp:
list_name.crbegin()
crend()
- Trả về const_reverse_iterator trỏ đến vị trí trước phần tử đầu (reverse end)
- Cú pháp:
list_name.crend()
Ví dụ duyệt ngược
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> Lt = {33, 44, 55, 66};
cout << "Reverse order: ";
for (auto itr = Lt.crbegin(); itr != Lt.crend(); ++itr)
cout << *itr << " ";
cout << endl;
// Kiểm tra chỉ đọc
// *itr = 100; // Lỗi compile: cannot assign to const reference
return 0;
}
Kết quả
Reverse order: 66 55 44 33
Giải thích: crbegin() trỏ đến 66 (phần tử cuối), crend() trỏ "trước" 33. Tăng iterator (++) di chuyển ngược về đầu.
So sánh 4 cặp iterator
| Cặp | Loại | Hướng | Sửa đổi |
|---|---|---|---|
| begin()/end() | iterator | Tiến | Có |
| cbegin()/cend() | const_iterator | Tiến | Không |
| rbegin()/rend() | reverse_iterator | Lùi | Có |
| crbegin()/crend() | const_reverse_iterator | Lùi | Không |
Lưu ý: Code mẫu gốc có lỗi logic in "The last element is 55" nhưng loop dùng crend/crbegin in ngược. Đã sửa để minh họa đúng.