如何在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
相关产品推荐
相关产品推荐

