C++ 将数组项移动4个位置
这些函数只将a[]1位置内的元素向右移动,但我想将其移动4个位置。我是个新手。对这家伙有什么提示或帮助吗C++ 将数组项移动4个位置,c++,arrays,C++,Arrays,这些函数只将a[]1位置内的元素向右移动,但我想将其移动4个位置。我是个新手。对这家伙有什么提示或帮助吗 void shiftright (int a[], int size); int main (void) { int a []= {1, 2, 3, 4, 5, 6, 7, 8}; shiftright( a, 8); for ( int i=0; i<8; i++) { cout << a[i] << ' '
void shiftright (int a[], int size);
int main (void)
{
int a []= {1, 2, 3, 4, 5, 6, 7, 8};
shiftright( a, 8);
for ( int i=0; i<8; i++)
{
cout << a[i] << ' ';
}
return(0);
}
void shiftright (int a[], int size)
{
int temp;
int temp1;
for (int i=0; i<(size -1); i++)
{
temp = a[size-1];
a[size-1] = a[i];
a[i] = temp;
}
}
void shiftright(int a[],int size);
内部主(空)
{
INTA[]={1,2,3,4,5,6,7,8};
shiftright(a,8);
对于(int i=0;i如果性能不是一个键值,您可以再调用'shiftright'三次(我假设您不能使用std::rotate)。修改'shiftright'函数以适应4的移位将减少可重用性(在大多数情况下)。例如,如果下次只需要旋转两次,则可以使用相同的功能。在您的情况下,k为4
可以使用另一种方法按顺序旋转数组
void reverse_array(int* arr, int left, int right) {
int* p1 = arr + left;
int* p2 = arr + right;
while (p1 < p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
p1++;
p2--;
}
}
void shiftright(int* arr, int k, int size) {
int n = size;
reverse_array(arr, 0, n-1); //! First reverse the complete array
reverse_array(arr, 0, k-1); //! Now reverse first k elements
reverse_array(arr, k, n-1); //! Now reverse element from k to last
}
void reverse_数组(int*arr,int left,int right){
int*p1=arr+左;
int*p2=arr+右;
而(p1
如果您只是为了学习而编写此函数,则可以按照建议使用标准函数,如std::rotate
,而不是编写您自己的版本。请再调用'shiftright'3次哈哈。谢谢。因为我不关心性能问题。这是最好的解决方案。