base()
chuyển đổi một iterator ngược vào iterator tương ứng về phía trước. Tuy nhiên, mặc dù sự đơn giản của nó, sự tương ứng này không phải là tầm thường như một điều có thể.
Khi một điểm iterator ngược tại một phần tử, nó dereferences trước đó, vì vậy các phần tử nó chất điểm đến và các yếu tố đó logic điểm đến khác nhau. Trong sơ đồ sau đây, i
là một iterator về phía trước, và ri
là một iterator ngược xây dựng từ i
:
i, *i
|
- 0 1 2 3 4 -
| |
*ri ri
Vì vậy, nếu ri
logic chỉ ra yếu tố 2
, nó thể chất trỏ tới yếu tố 3
. Do đó, khi được chuyển đổi thành một trình vòng lặp chuyển tiếp, trình lặp kết quả sẽ trỏ đến phần tử 3
, là một biến được loại bỏ trong ví dụ của bạn.
sau Chương trình nhỏ thể hiện các hành vi trên:
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
int main(int argc, char *argv[])
{
std::vector<int> v { 0, 1, 2, 3, 4 };
auto i = find(begin(v), end(v), 2);
std::cout << *i << std::endl; // PRINTS 2
std::reverse_iterator<decltype(i)> ri(i);
std::cout << *ri << std::endl; // PRINTS 1
}
Đây là một live example.
Nguồn
2013-05-17 12:32:17
Có thể bạn nên đọc điều này: http://www.cplusplus.com/reference/iterator/reverse_iterator/base/ – JBL