Advance

Chào chúng ta đang theo dõi khóa huấn luyện lập trình trực tuyến ngôn ngữ C++.Bạn vẫn xem: Iterator c++ là gì

Trong bài học về STL containers, bản thân đã trình làng với các bạn một số class được áp dụng để tạo ra các container với phần đa cách tổ chức dữ liệu không giống nhau. Mặc dù nhiên, tập thích hợp các thành phần được chứa bên phía trong container vẫn đang còn một đơn chiếc tự cố định (tùy vào thuật toán bố trí được chọn), cùng để để mắt qua các thành phần trong những container bọn họ sẽ sử dụng các STL Iterator tương ứng.Bạn đang xem: :: Iterator C++ Là Gì ? Map">Vector:: Iterator C++ Là Gì ? Map

STL Iterator

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

Bạn đang xem: Advance

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

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

Với từng container class bọn họ sẽ có một dạng hình iterator tương ứng. Mình đã 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, họ có iter là một đối tượng người sử dụng của class std::vector::iterator. Với phương pháp khai báo này, bạn cũng có thể là tất cả một class thương hiệu là iterator được định nghĩa phía bên trong khối lệnh của class std::vector.

Ví dụ khi bọn họ muốn gồm một Iterator sử dụng cho một std::list thì Iterator sẽ tiến hành khai báo như sau:

Mỗi container class trong STL (ngoại trừ các container quan trọng như std::stack cùng std::queue) gần như chứa định nghĩa của một iterator mặt trong.

Xem thêm: Cao Su Buna Công Thức Cấu Tạo Thu Gọn Là, Cao Su Buna Có Công Thức Cấu Tạo Như Sau:…


*

Và phần đông container có chứa định nghĩa class iterator sẽ sở hữu những cách tiến hành trả về quý giá kiểu iterator tương ứng:

begin() trả về một iterator thay mặt đại diện cho địa chỉ của phần tử đầu tiên trong container.end() trả về một iterator thay mặt cho vị trí đứng ngay sau phần tử cuối thuộc trong container.cbegin() trả về một hằng (read-only) iterator thay mặt đại diện cho vị trí của thành phần đầu tiên trong container.cend() trả về một hằng (read-only) iterator đại diện thay mặt cho địa chỉ đứng ngay sau thành phần cuối thuộc 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).

Tại sao end() lại trả về địa điểm đứng sau thành phần cuối cùng trong container?

Đó là vì bọn họ sẽ thực hiện iterator này để khám nghiệm xem thử bọn họ đã phê duyệt hết phần tử trong mảng tuyệt chưa. Ví dụ:

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