Tôi đang viết một iterator
(trên thực tế nó là const_iterator
cho đối tượng hiện tại của tôi, và tôi cũng muốn tạo một reverse_const_iterator
cũng có.C++ iterator và đảo ngược iterator
Tôi nhìn xung quanh, để xem làm thế nào để làm điều này và tôi tình cờ this:.
Thông báo tuy nhiên rằng khi một iterator được đảo ngược, phiên bản đảo ngược không trỏ đến cùng một nguyên tố trong phạm vi, nhưng đến một trước nó này là như vậy, để sắp xếp cho phần tử cuối cùng của một phạm vi: An it erator trỏ đến một phần tử cuối cùng trong một phạm vi, khi đảo ngược, được thay đổi để trỏ đến phần tử cuối cùng (không phải qua nó) của phạm vi (đây sẽ là phần tử đầu tiên của dải nếu đảo ngược). Và nếu một iterator cho phần tử đầu tiên trong một phạm vi được đảo ngược, trình vòng lặp đảo ngược trỏ đến phần tử trước phần tử đầu tiên (đây sẽ là phần tử cuối cùng của dải nếu được đảo ngược).
Đây có phải là những gì xảy ra trong nhận thức của người dùng, hoặc khi bạn dereference một reverse_iterator
làm nó không trừu tượng này đi bằng cách cho bạn giá trị/tài liệu tham khảo của đối tượng bạn nghĩ nó được trỏ đến? Đây chỉ là chi tiết triển khai?
hiểu biết của tôi là:
for(i = obj.rbegin(); i != obj.rend(); i++)
tương đương với
for(i = obj.begin(); i != obj.end(); i++)
trừ ngược lại. Và vì vậy *i
sẽ quay ngược lại thông qua vùng chứa trong trường hợp đầu tiên và chuyển tiếp qua vùng chứa trong trường hợp thứ hai. Bản năng của tôi có đúng không?
Nó chỉ hoạt động. –
Lưu ý: Khi làm việc với các trình vòng lặp, bạn nên luôn sử dụng tiền tăng ('++ i') thay vì tăng sau vì nó có thể hiệu quả hơn. –