如何将数组中的元素移动到下一个元素
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;
}
答案 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)
您可以从数组的末尾开始。你复制了
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;
}