Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将数组项移动4个位置_C++_Arrays - Fatal编程技术网

C++ 将数组项移动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] << ' '

这些函数只将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] << ' ';
    }
    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次哈哈。谢谢。因为我不关心性能问题。这是最好的解决方案。