2009-05-07 28 views
8

Giả sử tôi có một danh sách, trong đó không có nút mới nào được thêm hoặc xóa. Tuy nhiên, các nút có thể được xáo trộn xung quanh.An toàn để lưu trữ danh sách :: trình lặp để sử dụng sau này?

Có an toàn để lưu một trình vòng lặp, trỏ đến một nút trong danh sách và truy cập vào một số tùy ý sau này không?

Chỉnh sửa (câu hỏi tiếp theo): Tài liệu cho danh sách :: splice() cho biết rằng nó sẽ xóa các phần tử khỏi danh sách đối số. Điều này có nghĩa là nếu tôi gọi mối nối, sử dụng cùng một danh sách làm đối số cho hàm, thì các trình vòng lặp hiện có sẽ bị vô hiệu?

Trả lời

1

Vâng, std::list lặp chỉ là con trỏ tới một nút. Bạn có thể chèn, xóa (các nút khác) và sắp xếp lại các nút trong danh sách và trình vòng lặp không bị vô hiệu.

+9

Không có gì đảm bảo rằng một trình lặp là một con trỏ. Trong thực tế bạn có thể có thể được cấp rằng một std :: list <> :: iterator không phải là một con trỏ vì nó cần phải xử lý thông minh cho tất cả các hoạt động của trình vòng lặp (chẳng hạn như ++) –

24

Có.
Những người được cấp phép tiêu chuẩn mà người lặp lại vào danh sách sẽ không bị vô hiệu trừ khi mục đó, họ chỉ vào (ẩn dụ nói) bị xóa khỏi danh sách.

Từ trang này: http://www.sgi.com/tech/stl/List.html

Lists have the important property that insertion and splicing do not 
invalidate iterators to list elements, and that even removal invalidates 
only the iterators that point to the elements that are removed. 
Các vấn đề liên quan