c++ - 新的整数数组向右移动?

标签 c++ arrays algorithm

我应该输入数组 x[ ] 并创建新数组 y[ ],它从原始数组向右移动。

我对第一个元素有问题,y[0]

  • 例如。如果我输入 {7, 8, 4, 2, 3}
  • 下面的代码返回:{-693726240, 7, 8, 4, 2}

哪里出错了?

提前致谢。

#include <iostream>
using namespace std;

int main()
{
    int i, j, n, m=0, x[100],y[100];
    cin >>n;

    for(int i=0; i<n; i++)
    {
        cout << "enter "<< i+1 <<". element: ";
        cin >> x[i];

        if (i>0) 
            y[m++] = x[i-1];
        else     //THIS IS FOR Y[0] BUT DOESN'T WORK
            y[m++] = x[n-1];  
    }
    // ARRAY SHIFTED TO THE RIGHT:
    for(int j=0; j<m; j++)
    {
        cout << y[j]<<" ";
    }

    return 0;    
}

最佳答案

循环从 i == 0 开始。您在第 i 次迭代中读取了第 i 个元素。当您在第 0 次迭代中读取 x[n - 1] 时,i == n - 1 是 future 某个时间。 C++ 没有义务为您将变量初始化为任何特定值,因此当您从尚未初始化的位置读取时,您可能会收到垃圾(在本例中为 -693726240)。

要解决这个问题,你必须解决时间悖论。不要在第 0 次迭代时分配任何东西;等到循环完成,所有数据都进来了,然后才偷偷溜回去填入第0个元素。

或者,首先读取整个 x,然后当您知道所有值时,使用您当前的算法将 x 转换为 y (即将当前的 do-everything 循环分成读取循环和移位循环)。这样,当您从 y 开始时,所有的 x 值都将是已知的,并且您不会遇到任何时间旅行事故。

关于c++ - 新的整数数组向右移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52889106/

相关文章:

c - 在二叉搜索树中删除

c++ - 如何有选择地依赖 gcc 的共享对象?

java - 在字符串数组中查找字符的频率

c++ - 弃用从字符串常量到 char * 的转换错误

java - 在java中将数组存储在文件中

java - 这些数字从何而来?

r - 如何评估无监督算法的效率? pam 算法如何工作?

c++ - 为什么 std::list 有 remove 和 remove_if 函数

c++ - vector 中这种删除方法有什么问题?

c++ - C++ 中的作用域和返回值