You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中将数组首元素移至末尾实现元素移位?

问题解决:将数组第一个元素移至末尾

你的现有代码实现的是把最后一个元素移到数组开头,和需求不符,同时存在数组越界的错误,下面是具体修正方案:

1. 修正核心逻辑:实现「首元素移至末尾」的rotate函数

原rotate函数逻辑颠倒,修改为以下步骤:

  • 先保存数组第一个元素
  • 将数组从第二个元素开始,依次向前覆盖一位
  • 最后把保存的首元素放到数组最后一位

修正后的rotate函数:

void rotate(int A[], int n = 5)
{
    int x = A[0], i;
    // 从第0位开始,用后一位元素覆盖当前位
    for (i = 0; i < n - 1; i++)
    {
        A[i] = A[i + 1];
    }
    // 把首元素放到末尾
    A[n - 1] = x;
}

2. 修正数组长度计算的错误

main函数中计算数组长度时,sizeof(A[5])是访问数组越界元素(数组索引范围为0-4),会触发未定义行为,应改为sizeof(A[0]):

int n = sizeof(A) / sizeof(A[0]);

3. 完整修正代码

#include <iostream>
using namespace std;

void rotate(int A[], int n = 5)
{
    int x = A[0], i;
    for (i = 0; i < n - 1; i++)
    {
        A[i] = A[i + 1];
    }
    A[n - 1] = x;
}

int main()
{
    int A[] = { 1, 2, 3, 4, 5 }, i;
    int n = sizeof(A) / sizeof(A[0]);

    cout << "Given array is \n";
    for (i = 0; i < n; i++)
        cout << A[i] << ' ';

    for (int j = 0; j < n; j++)
    {
        rotate(A, n);

        cout << "\nStep " << j << " --> ";
        for (i = 0; i < n; i++)
        {
            cout << A[i] << ' ';
        }
    }
    return 0;
}

运行结果说明

执行后会输出:

Given array is 
1 2 3 4 5 
Step 0 --> 2 3 4 5 1 
Step 1 --> 3 4 5 1 2 
Step 2 --> 4 5 1 2 3 
Step 3 --> 5 1 2 3 4 
Step 4 --> 1 2 3 4 5 

每次循环都会把当前数组的第一个元素移到末尾,完全符合需求。

内容的提问来源于stack exchange,提问作者Stephanie Williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:01:17