begin()迭代器加上一个数位置会出现在哪里?

在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指向的元素)

今后还是要继续加强基础的学习!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值