C++学习之路: STL探索之 reverse_iterator 的一个小陷阱
1 2.reverse迭代器 2 a) 在逻辑上,rbegin指向最后一个元素,rend指向第一个元素的前一个位置。 3 b) 但是在实际实现上,rbegin指向最后一个元素的下一个位置,rend指向第一个元素。 4 c) reverse迭代器的物理位置与逻辑位置差1 5 d) 逻辑值比物理位置减少了1.
引言:
vector<int> vec 我们push_back是十个数
it
0 1 2 3 4 5 6 7 8 9
r_it
我们用 vector<int>:: iterator it = vec.find(begin(), end(), 5) //it现在指向 5所在pos
我们再定义一个逆向的迭代器
vector<int>:: reverse_iterator r_it(it) ; //用it初始化逆向 迭代器。
如果我们打印一下 r_it 结果却是4 。
1 #include <iostream> 2 #include <string> 3 #include <vector> 4 5 using namespace std; 6 7 int main(int argc, const char *argv[]) 8 { 9 vector<int> vec; 10 11 for (int i = 0; i <= 9; i++) { 12 vec.push_back(i) ; 13 } 14 15 vector<int>::iterator it = vec.begin() ; 16 while( *it != 5) 17 { 18 it++ ; 19 } 20 cout << *it << endl; 21 22 vector<int>::reverse_iterator r_it(it) ; 23 24 cout << *r_it << endl; 25 return 0; 26 } 27 28 结果: 29 30 ➜ homework ./a.out 31 5 32 4