如何在数组中向左旋转元素?

时间:2016-09-14 10:08:07

标签: c++

我正在尝试向左旋转数组,例如rotateLeft3([1,2,3])→[2,3,1]

这是我的解决方案,但由于某种原因它无法正常工作。有人可以解释一下我做错了什么吗?

#include <iostream>

using namespace std;

int main()
{
    bool six;
    int Array[3] = { 1,2,3 };
    int x = sizeof(Array) / sizeof(Array[0]);
    int temp = Array[0];
    int temp2;
    for (int i = 0; i < x; i++)
    {
        Array[i] = Array[i + 1];
        Array[x - 1] = temp;
    }
    for (int i = 0; i < 3; i++)
    {
        cout << Array[i] << endl;
    }
    system("pause");

    return 0;
}

5 个答案:

答案 0 :(得分:5)

这将是正确的方法。 因此,在代码中进行以下更改,
1)将循环条件更改为结束(x-1)(否则它将超出范围)
2)删除循环内的临时分配
3)循环结束后分配值。

int temp = Array[0];
for (int i = 0; i < x-1; i++){
    Array[i] = Array[i + 1];
}
Array[x-1] = temp;

或者如果您想使用内置模板,请在std::rotate标题中使用algorithm

答案 1 :(得分:4)

使用std::rotate标题中定义的algorithm

编辑:

更好的链接是here, along with an implementation.

答案 2 :(得分:2)

使用std::rotate,它将是

std::rotate(std::begin(a), std::begin(a) + 1, std::end(a));

Demo

答案 3 :(得分:1)

// Complete the rotLeft function below.
vector<int> rotLeft(vector<int> a, int d) {
    int temp=0;
    int size = a.size();
    /*if shifts are more than size of array*/
    /*example if d=8 size=5 
    then result will be 8%5=3 left shift only*/
    d = d%size;
    int shift = size-d;
    bool r = false;
    /*here i am taking decision whether i have to do right shift or left shift*/
    /*if size=5 d=4 
    then we can do right shift to 1*/
    if(d > shift)
    {
        d = shift;
        r = true;
    }

    for(int i=0;i<d;i++)
    {
        /*do right shift*/
        if(r == true)
        {
            temp = a[size-1];
            for(int j=size-1;j>0;j--)
            {
                a[j] = a[j-1];
            }
            a[0] = temp;
        }
        /*do left shift*/
        else
        {
            temp = a[0];
            for(int j=0;j<size-1;j++)
            {
                a[j] = a[j+1];
            }
            a[size-1] = temp;
        }
    }
    return a;
}

答案 4 :(得分:-1)

最好的方法是为此目的使用std :: rotate