如何解决使用指针将数组元素向右移动
我很难弄清楚如何使用指针(而不是使用swap)将数组的元素向右移动。我尝试过尝试从哪里开始以及指针如何增加指针,但是当我仅通过打印数组值进行测试时,它总是弄乱了数组的输出。请帮助我,我非常沮丧。
// REQUIRES: there are at least n elements in arr;
// n >= 1
// MODIFIES: the elements in arr
// EFFECTS: All elements are "shifted" right by one unit,with the
// last element wrapping around to the beginning.
// EXAMPLE: If arr contains [0,1,3,4],it would be modified to
// contain [4,3]
// NOTE: You must use traversal by pointer.
// You may not use an extra array.
void slideRight(int arr[],int n) {
int *temp = arr;
for(int *ptr = arr+1; ptr < arr + n - 1;) {
arr[*ptr] = arr[*ptr-1];
}
arr[0] = *temp;
}
解决方法
您的代码有几个问题。
- 首先,它包含一个无限循环:
ptr < arr + n - 1
对于大小大于1的数组适用。 在整个循环中不变。 仅更改arr
的内容。 - 第二,它有潜在的界限,访问
arr[*ptr]
, 因为*ptr
是存储在数组中的任意整数。
有一种完全可以执行此操作的标准算法:
void slideRight(int arr[],int n) {
std::rotate(arr,arr + n - 1,arr + n);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。