2010-07-21 24 views

Trả lời

11

Có, miễn là không có trình vòng lặp nào bị vô hiệu.

Ví dụ, sau đây sẽ không có giá trị:

std::deque<int> d; 

std::deque<int> begin1 = d.begin(); 
d.push_front(42);     // invalidates begin1! 
std::deque<int> begin2 = d.begin(); 
assert(begin1 == begin2);   // wrong; you can't use begin1 anymore. 
4

Vâng, begin() sẽ trả lại iterator cùng được đưa ra một ví dụ container, trừ khi bạn thay đổi container một cách nào đó (end() có tài sản này là tốt). Ví dụ: std::vector::push_back() có thể khiến mảng được phân bổ lại để chứa các phần tử mới.

+1

Hãy cẩn thận sử dụng thuật ngữ 'same'. Tôi không nghĩ rằng tất cả các thùng chứa sẽ trả về trình lặp lặp lại giống nhau cho cùng một mục. Mặc dù chúng sẽ so sánh bằng nhau khi so sánh với ==. –

+0

Bạn nói đúng, tôi đã lặp lại câu trả lời của tôi. –

+1

Nhận xét của Martin York vẫn giữ: Mỗi cuộc gọi đến 'begin()' sẽ trả về một trình lặp khác nhau ngay cả khi chúng so sánh giống nhau. Điều này đang được chọn lọc vào lúc này, nhưng các trình vòng lặp sẽ không giống nhau. '& c.begin()! = & c.begin()' ngay cả khi 'c.begin() == c.begin()' (giả sử ngữ cảnh luồng đơn). –

Các vấn đề liên quan