2008-11-19 31 views
17

Tôi muốn chèn một cái gì đó vào một danh sách STL trong C + +, nhưng tôi chỉ có một iterator đảo ngược. Cách thông thường để thực hiện điều này là gì?Làm thế nào để bạn chèn với một reverse_iterator

này hoạt động: (tất nhiên nó)

std::list<int> l; 
std::list<int>::iterator forward = l.begin(); 
l.insert(forward, 5); 

này không làm việc: (? Tôi nên làm gì thay vì)

std::list<int> l; 
std::list<int>::reverse_iterator reverse = l.rbegin(); 
l.insert(reverse, 10); 

Trả lời

20

l.insert(reverse.base(), 10); sẽ chèn '10' ở cuối , cho định nghĩa của bạn về trình lặp ngược 'ngược lại'. Trên thực tế, l.rbegin().base() == l.end().

6

Về cơ bản, bạn không cần. Xem 19.2.5 trong TCPPPL.

Trình biến đổi ngược có một thành viên được gọi là base() sẽ trả về trình lặp lặp "thông thường". Vì vậy, mã sau sẽ hoạt động trong ví dụ của bạn:

l.insert (reverse.base(), 10);

Hãy cẩn thận mặc dù vì phương thức base() trả về phần tử sau khi phần tử reverse_iterator ban đầu đã trỏ tới. (Điều này để các trình đảo ngược trỏ tới rbegin() và hàm rend() hoạt động chính xác.)

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