Trích dẫn




Only a person who risks is truly free.


Ảnh

Ảnh

Thứ Tư, 4 tháng 2, 2015

Iterator hay pointer?

Bài viết này sẽ tránh cho các bạn hiểu lầm về công dụng, môi trường hoạt động của 2 thành phần trên.
Đối với một số bạn mới tiếp cận ngôn ngữ c/c++ thì sẽ được tiếp cận với pointer, sau một khoảng thời gian thì các bạn sẽ tiếp cận container vector trong thư viện STL thì có một sự băn khoăn nhỏ bé về tính chất 2 bé này.
Nó đều dùng để trỏ đến một giá trị  nhưng khi bạn nhìn vào danh sách các hàm hỗ trợ cho vector (http://www.cplusplus.com/reference/vector/) thì có 2 hàm trả về kiểu Iterator khá lạ là: rbegin, rendbegin, end. chữ "rờ" trong rbegin là "reverse" có nghĩa là đảo lại. Các hàm này đểu chỉ tới giá trị của đầu và cuối vector. Nhưng tại sao lại cần phải thêm 2 hàm dư thừa như vậy. Để thuận lợi? rend nhìn rắc rối hơn end mà :)). Vậy thì lý do là gì?
Khoan....... Iterator là gì? Pointer là gì?


1/ Pointer: Chỉ đơn giản là một biến. Như các bạn đã biết: 1 biến bao gồm 2 thành phần là địa chỉ giá trị. Điểm đặc biệt của pointer so với các biến khác gồm 3 phần sau đây:
+Nó chiếm một dung lượng cố định là 4byte. Luôn luôn là như vậy, kể cả khi bạn để nó là con trỏ *char hay *int,...
+Nó có kiểu void. Bạn có thể để declared nó như sau void* a. Vậy thì nó có ý nghĩa gì? Và nó có liên hệ gì đến hệ điều hành của máy tính không? Mình sẽ viết một bài sau chuyên về pointer cho các bạn.
+Vì nó có một dung lượng cố định là 4 byte nên nó sẽ chỉ làm một nhiệm vụ duy nhất. Đó chính là chứa địa chỉ.
2/ Iterator: Nó có phải là một biến không? Gần giống như vậy.
p/s:Thêm một cái hẹn nữa thôi :D gần tết rồi

Không có nhận xét nào:

Đăng nhận xét