Chào các bạn đang theo dõi khóa học lập trình trực tuyến ngôn ngữ C++.Bạn đang xem: Iterator c++ là gì

Trong bài học về STL containers, mình đã giới thiệu với các bạn một số class được sử dụng để tạo ra các container với những cách tổ chức dữ liệu khác nhau. Tuy nhiên, tập hợp các phần tử được chứa bên trong container vẫn có một trật tự nhất định (tùy vào thuật toán sắp xếp được chọn), và để duyệt qua các phần tử trong các container chúng ta sẽ sử dụng các STL Iterator tương ứng.

Đang xem: Sự Khác Biệt Giữa Const_ Iterator C++ Là Gì ? C++ — Một Iterator Nói Chung Là Gì

STL Iterator

Một Iterator là một đối tượng có thể đi qua (iterate over) một container class mà không cần biết trật tự các phần tử bên trong mảng. Iterator còn là một cách để truy cập dữ liệu bên trong các container.

Các bạn có thể hình dùng Iterator giống như một con trỏ trỏ đến một phần tử nào đó bên trong container với một số toán tử đã được định nghĩa:

Operator* cereference và trả về giá trị bên trong container tại vị trí mà iterator được đặt.Operator++ di chuyển iterator đến phần tử tiếp theo trong container.Operator– ngược lại so với operator++.Operator== và operator!= dùng để so sánh vị trí tương đối của 2 phần tử đang được trỏ đến bởi 2 iterator.Operator= dùng để gán vị trí mà iterator trỏ đến.Khai báo một Iterator

Với mỗi container class chúng ta sẽ có một kiểu iterator tương ứng. Mình sẽ lấy ví dụ về iterator của class std::vector như sau:

#include #include using namespace std;int main(){std::vector vec;std::vector::iterator iter;return 0;}Như vậy, chúng ta có iter là một đối tượng của class std::vector::iterator. Với cách khai báo này, chúng ta có thể là có một class tên là iterator được định nghĩa bên trong khối lệnh của class std::vector.

Lưu ý: kiểu dữ liệu của các phần tử trong container class sẽ là kiểu dữ liệu được dùng cho generic_type của iterator.

Xem thêm: Tra Từ Đồ Con Lợn Tiếng Anh Là Gì, Pig : Con Heo, Lợn (Pi

Ví dụ khi chúng ta muốn có một Iterator dùng cho một std::list thì Iterator sẽ được khai báo như sau:

Mỗi container class trong STL (ngoại trừ các container đặc biệt như std::stack và std::queue) đều chứa định nghĩa của một iterator bên trong.

*

Và những container có chứa định nghĩa class iterator sẽ có những phương thức trả về giá trị kiểu iterator tương ứng:

begin() trả về một iterator đại diện cho vị trí của phần tử đầu tiên trong container.end() trả về một iterator đại diện cho vị trí đứng ngay sau phần tử cuối cùng trong container.cbegin() trả về một hằng (read-only) iterator đại diện cho vị trí của phần tử đầu tiên trong container.cend() trả về một hằng (read-only) iterator đại diện cho vị trí đứng ngay sau phần tử cuối cùng trong container.

Ví dụ:

int main(){std::vector vec;for (int i = 0; i ::iterator the_beginning = vec.begin();std::vector::iterator the_end = vec.end();std::cout , trong khi chỉ số của phần tử cuối cùng trong container là (vec.size() – 1).

Xem thêm: Xin Visa B1 B2 Là Gì ? Lưu Ý Khi Xin Visa Mỹ Dạng Công Tác Hoặc Du Lịch

Tại sao end() lại trả về vị trí đứng sau phần tử cuối cùng trong container?

Đó là vì chúng ta sẽ sử dụng iterator này để kiểm tra xem thử chúng ta đã duyệt hết phần tử trong mảng hay chưa. Ví dụ:

Hẹn gặp lại các bạn trong bài học tiếp theo trong khóa học lập trình C++ hướng thực hành.

Leave a Reply

Your email address will not be published. Required fields are marked *