Tìm hiểu crbegin() và crend() của std::array trong C++ STL.
array::crbegin()
Trả về constant reverse iterator trỏ đến phần tử cuối cùng (bắt đầu duyệt ngược). Không nhận tham số.
array::crend()
Trả về constant reverse iterator trỏ đến vị trí "trước phần tử đầu tiên" (kết thúc duyệt ngược). Là nghịch đảo của crbegin().
Cặp crbegin()/crend() dùng để duyệt ngược mảng chỉ đọc (không thể sửa đổi phần tử qua iterator này).
Ví dụ
#include <iostream>
#include <array>
using namespace std;
int main() {
array<int, 10> arr = {0, 11, 22, 33, 44, 55, 66, 77, 88, 99};
cout << "Duyet nguoc (chi doc): ";
for(auto it = arr.crbegin(); it != arr.crend(); ++it) {
cout << *it << " ";
// *it = 100; // LỖI compile: không thể sửa qua const_reverse_iterator
}
return 0;
}
Kết quả
Duyet nguoc (chi doc): 99 88 77 66 55 44 33 22 11 0
Các cặp iterator liên quan
| Iterator | Loại | Hướng | Có sửa được? |
|---|---|---|---|
| begin()/end() | iterator | Xuôi | Có |
| cbegin()/cend() | const_iterator | Xuôi | Không |
| rbegin()/rend() | reverse_iterator | Ngược | Có |
| crbegin()/crend() | const_reverse_iterator | Ngược | Không |
Khi nào dùng crbegin/crend?
- Duyệt ngược mảng trong hàm nhận
const array&. - Đảm bảo không vô tình sửa đổi dữ liệu khi chỉ cần đọc.
- Kết hợp với algorithm:
find(arr.crbegin(), arr.crend(), value).