指针进行数组遍历

时间:2019-01-29 23:32:15

标签: c++

所有元素右移一个单位,最后一个元素环绕到开头。

[0,1,3,3,4],将其修改为包含[4,0,1,3,3],但这使其更新为包含[4,0,3,3,3 ]

void shiftRight(int arr[], int n) {
    int temp = arr[n - 1];
    const int *end = arr + n - 1;
    for (const int *i = end; i > arr; i--) {
       arr[*i] = arr[*i - 1];
    }
    arr[0] = temp;
}

该数组未正确更新。阵列更新有什么问题?

2 个答案:

答案 0 :(得分:0)

您正在将指向数组的指针与索引混淆:

df[df.apply(lambda x: x.Name.upper() in x.Title.upper(), axis=1) == True]


# Output
    Name    Value Title
1   donald  10    welcome to donald's castle
2   minnie  86    Minnie mouse clubhouse

您正在将arr[*i] = arr[*i - 1] i进行比较,这表明存在严重错误! 您的循环实际上是:

arr

指针不能为int *end = arr + n - 1; for (int *i = end; i > arr; i--) { *i = *(i - 1); ,您正在修改数组。

答案 1 :(得分:0)

使用std,您可以简单地做到:

void shiftRight(int arr[], int n) {
    std::rotate(arr, arr + n - 1, arr + n);
}

Demo