C++ 如何在c+;中移动数组中的每个元素+;只使用指针向右移动一个?
例如,[1,2,3,4,5]将变成[5,1,2,3,4] 我不能使用额外的数组,只能使用索引遍历。我也可以使用int来存储值,但这似乎没有帮助 这是我的尝试,但没有成功:C++ 如何在c+;中移动数组中的每个元素+;只使用指针向右移动一个?,c++,arrays,C++,Arrays,例如,[1,2,3,4,5]将变成[5,1,2,3,4] 我不能使用额外的数组,只能使用索引遍历。我也可以使用int来存储值,但这似乎没有帮助 这是我的尝试,但没有成功: void shiftonetoright(int arr[], int n){ int *ptr1 = arr; int s1; while(n>0) { ptr1++; s1 =*ptr1; *ptr1 =s1; n-
void shiftonetoright(int arr[], int n){
int *ptr1 = arr;
int s1;
while(n>0)
{
ptr1++;
s1 =*ptr1;
*ptr1 =s1;
n--;
}
}
您必须将最后一个元素旋转回起始位置,并简单地移动其他元素,因此更像(假设
n
是arr
中的元素数):
您必须将最后一个元素旋转回起始位置,并简单地移动其他元素,因此更像(假设
n
是arr
中的元素数):
您必须将最后一个元素旋转回起始位置,并简单地移动其他元素,因此更像(假设
n
是arr
中的元素数):
您必须将最后一个元素旋转回起始位置,并简单地移动其他元素,因此更像(假设
n
是arr
中的元素数):
void shiftonetoright(int-arr[],int-n)
{
int*ptr1=arr;
int s1=ptr1[0];
int s2;
对于(int i=1;i
void shiftonetoright(int arr[],int n)
{
int*ptr1=arr;
int s1=ptr1[0];
int s2;
对于(int i=1;i
void shiftonetoright(int arr[],int n)
{
int*ptr1=arr;
int s1=ptr1[0];
int s2;
对于(int i=1;i
void shiftonetoright(int arr[],int n)
{
int*ptr1=arr;
int s1=ptr1[0];
int s2;
对于(int i=1;i
使用std::rotate(arr,arr+1,arr+n)
。这与您之前的问题(有公认的答案)有显著不同吗?顺便说一下,s1=*ptr1*ptr1=s1代码>在您的代码中没有多大意义。。。这确实是一条路要走。此外,你可能会发现肖恩·帕雷特的演讲在这个话题上提供了特别的信息;)@Kerrekop说他必须使用pointer@PaulEvans:很好,arr
、arr+1
和arr+n
都是指针。使用std::rotate(arr,arr+1,arr+n)
。这与您之前的问题(有公认的答案)有显著不同吗?顺便说一下,s1=*ptr1*ptr1=s1代码>在您的代码中没有多大意义。。。这确实是一条路要走。此外,你可能会发现肖恩·帕雷特的演讲在这个话题上提供了特别的信息;)@Kerrekop说他必须使用pointer@PaulEvans:很好,arr
、arr+1
和arr+n
都是指针。使用std::rotate(arr,arr+1,arr+n)
。这与您之前的问题(有公认的答案)有显著不同吗?顺便说一下,s1=*ptr1*ptr1=s1代码>在您的代码中没有多大意义。。。这确实是一条路要走。此外,你可能会发现肖恩·帕雷特的演讲在这个话题上提供了特别的信息;)@Kerrekop说他必须使用pointer@PaulEvans:很好,arr
、arr+1
和arr+n
都是指针。使用std::rotate(arr,arr+1,arr+n)
。这与您之前的问题(有公认的答案)有显著不同吗?顺便说一下,s1=*ptr1*ptr1=s1代码>在您的代码中没有多大意义。。。这确实是一条路要走。此外,你可能会发现肖恩·帕雷特的演讲在这个话题上提供了特别的信息;)@Kerrekop说他必须使用pointer@PaulEvans:很好,arr
、arr+1
和arr+n
都是指针。OP是。@blastfurny啊,我不知道……这仍然是个好答案,OP只是有点奇怪。@blastfurny谢谢,但是。。。一个奇怪的C++程序员——下一步是什么?p OP是。@BLASTHERNEAR啊,我不知道……这仍然是个好答案,OP只是有点奇怪。@BLASTHERNEAR谢谢,但是。。。一个奇怪的C++程序员——下一步是什么?p OP是。@BLASTHERNEAR啊,我不知道……这仍然是个好答案,OP只是有点奇怪。@BLASTHERNEAR谢谢,但是。。。一个奇怪的C++程序员——下一步是什么?p OP是。@BLASTHERNEAR啊,我不知道……这仍然是个好答案,OP只是有点奇怪。@BLASTHERNEAR谢谢,但是。。。一个奇怪的C++程序员——下一步是什么?穷人。。。太多相同的An…Ooopss。。。太多相同的An…Ooopss。。。太多相同的An…Ooopss。。。太多相同的答案。。。。
void shiftonetoright(int arr[], int n) {
int last = arr[n - 1];
int* ptr = arr;
for( int i = n - 1; i > 0; --i) {
*(ptr + i) = *(ptr + i - 1);
}
*ptr = last;
}
void shiftonetoright(int arr[], int n)
{
int *ptr1 = arr;
int s1 = ptr1[0];
int s2;
for(int i = 1 ; i < n ; ++i)
{
s2 = ptr1[i];
ptr1[i] = s1;
s1 = s2;
}
ptr1[0] = s1;
}