+3 k thích
696 đã xem
trong Kiến thức CNPM bởi (170 điểm)
đã sửa bởi
Tại sao vector class hổ trợ iterator. Nó có ích lợi gì không?

Iterator hổ trợ trong list thì dễ hiểu vì list là kiểu linked list nên dùng iterator để truy xuất lên xuống các phần tử của nó trong container và dùng để xóa phần tử.

Có ví dụ ích lợi iterator trong vector class cho mình xin luôn. Cảm ơn các bạn nhiều.

3 Trả lời

+2 k thích
bởi (2.7k điểm)
đã được chọn bởi
 
Hay nhất
Lợi ích rõ ràng nhất đối với vector là bạn xài được mấy hàm có sẵn trong cái thư viện chuẩn (Algorithm v.v..). Ngoài ra nó cũng giúp code dễ hiểu và thống nhất hơn. Ngoài ra vector nó thuộc một trong các containers của C++ nên nó phải tuân theo một số quy tắc thiết kế, do đó nó phải có iterator.
bởi (4.8k điểm)
Nếu không có iterator, bạn tạo ra một vector rồi chỉ biết bỏ đó không thao tác được gì cả. Khi đó bạn mới thấy lợi ích rõ ràng nhất của iterator ;) Còn thư viện algorithm hay "theo quy tắc" không phải là lý do để iterator của vector tồn tại.
http://en.wikipedia.org/wiki/Iterator
0 k thích
bởi (4.8k điểm)

Mọi container (vector, list, deque,...) của thư viện C++ STL đều có iterator. Iterator có thể dịch nôm na là con trỏ duyệt, là một thành phần rất quan trọng để xử lý các thao tác trên container. Con trỏ (pointer) trong mảng C bình thường chính là một loại iterator đấy. Ví dụ:

int a[5];
a[2] = 3; //thực ra là bên dưới xảy ra thế này *(a+2) = 3

Trong trường hợp trên a (con trỏ hằng) chính là iterator của mảng a[5].

Đối với vector cũng vậy, cho std::vector<int> vec. Khi bạn gọi vec[i] thì thật chất bên dưới xảy ra như thế này:
return *(vec.begin() + i); //vec.begin() là iterator chỉ đến đầu vector

Hoặc là gọi vec.size():
return vec.end() - vec.begin(); //vector.end() là iterator chỉ đến ngay sau phần tử cuối của vector

Tóm lại mọi xử lý trên mọi container đều thông qua các iterator bên dưới. List không có operator [] bởi vì cấu trúc lưu trữ của list rời rạc, không liền mạch bộ nhớ, nên iterator của list so với vector cũng khác và không truy suất ngay *(lst.begin() + i) như vector được, mà chỉ có thể tăng iterator từ từ.
 

+2 k thích
bởi (2.2k điểm)
Iterator là khái niệm tổng quát cho cơ chế duyệt một tập hợp (collection), với tập hợp đó có thể là mảng, danh sách, đồ thị v.v.

Nhờ iterator mà các thuật toán có thể làm việc tổng quát với mọi loại tập hợp, thông qua cơ chế duyệt iterator. Việc vector hỗ trợ iterator như vậy là đương nhiên. Các cơ chế operator như [] chỉ là thao tác tiện lợi thôi.
Chào mừng đến với Q&A FIT. Bạn có thể đặt câu hỏi và nhận được câu trả lời từ các bộ phận hỗ trợ và những thành viên khác tại Khoa Công nghệ Thông tin, Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia TP.HCM. Bạn hãy đăng nhập bằng tài khoản Google để gửi hoặc trả lời các câu hỏi.
...