-
Notifications
You must be signed in to change notification settings - Fork 272
/
reverse_iterator的base()函数
34 lines (28 loc) · 1.7 KB
/
reverse_iterator的base()函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <vector>
using namespace std;
//reverse_iterator的base成员函数返回一个"对应的"正向iterator”,此说法其实并不准确。
//对于插入操作而言,直接在ri.base()(返回的是正向迭代器的位置,即ri的位置向右移一位)位置插入元素等于在反向迭代器ri的插入效果(但是insert和erase函数不支持反向迭代器,所以需要base函数)
//但是对于删除操作,并非如此。当需要把reverse_iterator转换成iterator的时候,由于ri.base()在ri的右一位,所以需要使用(ri++).base()来获取原来的需要删除的正向迭代器的位置
//关于reverse_iterator的base()函数的具体意义和使用参考(讲的简单清晰) https://www.cnblogs.com/yanqi0124/p/3808286.html
int main()
{
vector<int> v;
v.reserve(5);
for (int i = 0; i < v.capacity(); i++)
v.push_back(i);
//cout << v.size() << endl << v.capacity() << endl;
//for (int i = 0; i < v.size(); i++)
// cout << v[i] << endl;
vector<int>::reverse_iterator ri = find(v.rbegin(), v.rend(), 3); // 如果ri = v.rbegin. iterator i = ri.base()的话。就已经向右偏移越界了,记得不也能访问,否在崩溃
cout << *ri << endl;
vector<int>::iterator ib = ri.base();
cout << *ib << endl;
vector<int>::iterator ri_ = find(v.begin(), v.end(), 3);
cout << *ri_ << endl;
/*vector<int>::reverse_iterator ri2 = find(v.rend(), v.rbegin(), 3); // 对于反向迭代器来说,对rend返回的指针,再++的话就会向左越界
cout << *ri2 << endl;*/
vector<int>::iterator ri2_ = find(v.end(), v.begin(), 3); //对于迭代器来说,对end返回的指针,再++的话就会向右越界
cout << *ri2_ << endl;
return 0;
}