while(k>=n){
k=k-n;
}
std::rotate(nums, nums+n-k, nums+n);......
具体可以看stl_algo.h,有forward, bidirectional, random iterator版本。
我不明白的是forward_iterator版本:
_ForwardIterator __first2 = __middle;
do
{
std::iter_swap(__first, __first2);
++__first;
++__first2;
if (__first == __middle)
__middle = __first2;
}
while (__first2 != __last);
__first2 = __middle;
while (__first2 != __last)
{
std::iter_swap(__first, __first2);
++__first;
++__first2;
if (__first == __middle)
__middle = __first2;
else if (__first2 == __last)
__first2 = __middle;
}第一个do while loop的作用是什么。
这么写:
void myswap(int& m, int& n)
{
m = m^n;
n = m^n;
m = m^n;
}
void rotate(int nums[], int n, int k) {
while (k>=n){
k = k - n;
}
if (k <= 0) return;
k = n - k;
int p = k;
int s = 0;
int e = n;
while (p!=n){
myswap(nums[s], nums[p]);
s++; p++;
if (s==k){
k = p;
}else if(p==n){
p = k;
}
}
}提交也过了。

本文深入解析了C++中forward_iterator版本的旋转算法实现细节,包括两个do-while循环的作用及其背后的迭代器原理。通过实例代码解释了如何在不改变元素顺序的情况下,通过旋转数组或容器元素来达到特定目的。

1369

被折叠的 条评论
为什么被折叠?



