一.函数用法
在做leetcode 189 旋转数组时了解了reverse函数的使用方法
题目连接:
力扣https://leetcode.cn/problems/rotate-array/
reverse
是一个函数,它可以将一个区间内的元素进行反转。在 C++ 中,reverse
函数的定义在头文件 <algorithm>
中。函数的原型如下:
template<class BidirIt>
void reverse(BidirIt first, BidirIt last);
其中 BidirIt
表示双向迭代器,first
和 last
分别表示要反转的区间的起始位置和结束位置,函数将会反转 [first, last)
区间内的所有元素。
注意:
在C++中,last是结束元素的下一位。例如,如果我们有一个数组
arr
,其长度为n
,则指向最后一个元素的指针为&arr[n-1]
,而指向最后一个元素下一位的指针为&arr[n]
。因此,在使用STL函数时,通常使用last
作为“超尾指针”,以便包含整个区间,而不仅仅是前n个元素。
二.函数实现原理
定义两个元素left和right,初始时分别指向容器的头和尾元素
然后通过不断交换left和right所指位置的元素,并且在交换过程中left和right向中间靠近
这是我的手写代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void reverse(vector<int>& nums) {
int left = 0, right = nums.size() - 1;
while (left < right) {
swap(nums[left], nums[right]);
left++;
right--;
}
}
int main() {
vector<int> nums = {1, 2, 3, 4, 5};
reverse(nums);
for (auto num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
输出结果为·
5 4 3 2 1