Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

list::crbegin() và crend() trong C++ STL

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ặpLoạiHướngSửa đổi
begin()/end()iteratorTiếnCó
cbegin()/cend()const_iteratorTiếnKhông
rbegin()/rend()reverse_iteratorLùiCó
crbegin()/crend()const_reverse_iteratorLùiKhô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.