数组转移到下一个元素

时间:2010-09-06 09:32:08

标签: c++ arrays

如何将数组中的元素移动到下一个元素

eg: x[5] = { 5, 4, 3, 2, 1 }; // initial values
    x[0] = 6; // new values to be shifted
    x[5] = { 6, 5, 4, 3, 2 }; // shifted array, it need to be shifted, 
                              // not just increment the values.

这是我到目前为止所做的。这是错的,这就是我在这里需要帮助的原因。提前谢谢。

#include <iostream>

using namespace std;

int main() 
{
  int x[5] = { 5, 4, 3, 2, 1 };

  int array_size = sizeof(x) / sizeof(x[0]);

  x[0] = 6;

  int m = 1;

  for(int j = 0; j < array_size; j++) {
    x[m+j] = x[j];
    cout << x[j] << endl;
  }

  return 0;
}

7 个答案:

答案 0 :(得分:14)

#include<algorithm>

// ...
std::rotate(x, x+4, x+5);
x[0] = 6;

答案 1 :(得分:8)

要“向右移动”,你必须从数组末尾迭代:

for(int j = array_size - 2; j >= 0; j--) {
   x[m+j] = x[j];
   cout << x[j] << endl;
}   

否则你只需用第0个元素覆盖所有元素。

请注意array_size - 2 - 否则你会“一个接一个”试图访问数组末尾之外的元素,这是未定义的行为。

答案 2 :(得分:8)

#include <iostream>

int main () {

  int x[5] = { 5, 4, 3, 2, 1 };

  int array_size = sizeof (x) / sizeof (x[0]);

  for (int j = array_size - 1; j > 0; j--) {

      x[j] = x[j - 1];
  }

  x[0] = 6;

  for (int j = 0; j < array_size; j++) {

      std::cout << x[j];
  }

  return 0;
}

答案 3 :(得分:4)

首先,您应该在之前移动数组中的旧值来编写新值。但是,您最好使用memmove()而不是循环。或者更好地使用std::vector而不是数组 - 它会为您处理所有这些低级问题,包括在需要时自动调整数组大小。

答案 4 :(得分:1)

在一般情况下,您需要移动m元素(其中0 <= m <n):从数组的末尾开始。如果从开头(索引0)开始,则覆盖然后移动该覆盖的值。

研究std::memmove的源代码也可能具有指导意义。

答案 5 :(得分:0)

您可以从数组的末尾开始。你复制了

  • 元素在第二个位置到 最后一个职位,
  • 元素在第3个最后位置到 第二个位置,
  • ....
  • 第一个位置(索引0)到第二个位置的
  • 元素 位置,最后
  • 复制第一个中的新号码 位置。

for(j = array_size-1; j >0; j--) {
 x[j] = x[j-1];
}
x[0] = 6;

答案 6 :(得分:0)

    #include <iostream>

    using namespace std;

    int main() 
    {
       int x[5] = { 5, 4, 3, 2, 1 };

        int array_size = sizeof(x) / sizeof(x[0]);

        int m = 1;

        for(int j = array_size-1; j > 0; j--) {
           x[j] = x[j-m];
           cout << x[j] << endl;
        }

       x[0] = 6;
       return 0;
    }