在leetcode上做189.题【轮换数组】时,我发现vector<int> v数组的begin迭代器加上一个数时的结果和预料有些偏差。
比如说:v.begin() + 3,按照测试的结果,这个迭代器的指向是数组的第三个值,假设数组从0开始,则此迭代器指向v[2]。
本来这也不是不可以接受的,但就在今天上午我刚刚看过C++ primer(第五版)3.4节的迭代器的介绍,在99页中间,表 3.7 中,在iter + n 这一栏书中写道:
迭代器加上一个整数值仍得一个选代器,迭代器指示的新位置与原来相比向前移动了若干个元素。结果迭代器或者指示容器内的一个元素,或者指示容器尾元素的下一位置 。
当时我的理解是,既然是加n,那必然向前移动n个位置,在vs上的程序确实也验证了我这个想法:
vector<int> v{ 1, 2, 3, 4, 5, 6, 7 };
cout << *(v.begin() + 1) << endl;
这段程序的输出为 2,也就说明迭代器+1后向后移动了一位,当时在轮换数组中,使用了reverse函数后,我惊奇的发现迭代器+1之后,好像没有变化:
vector<int> v{ 1, 2, 3, 4, 5, 6, 7 };
reverse(v.begin(), v.begin() + 1);
for (auto c : v) cout << c << " ";
cout << endl;
这段程序的输出是:1 2 3 4 5 6 7;
果然在查了资料之后发现,reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素)
今后还是要继续加强基础的学习!!!