如何反转数组中的元素?

时间:2018-02-12 19:50:43

标签: c++ arrays

因此作业时我遇到了一个问题,希望我在一个数组中反转元素。

 void main() {

        int myarray[6] = { 12,45,23,123,23,27 };
        int arraylength = 6;
        int temp;

        for (int i = 0; i < arraylength/2; i++)
        {
            temp = myarray[i];
            myarray[i] = myarray[(arraylength - 1) - i];
            myarray[(arraylength - 1) - i] = temp;
            cout << temp;

        }

}

谁知道我哪里出错了?我似乎无法让它在相当长的一段时间内一直在努力

预期产出为(27,23,123,23,45,12)

3 个答案:

答案 0 :(得分:2)

你的程序工作正常,你的输出不起作用。您需要添加一个循环来打印已经反转的数组的所有元素:

for (int i = 0; i < 6; ++i)
{
   cout << myarray[i] << " ";
}

Try Here Online

对于更新的循环,您需要打印myarray[i],而不是temp。并且它不会工作,因为你的循环只迭代了一半的元素

答案 1 :(得分:2)

您的程序是正确的,但您应该使用循环来打印所有元素:

for(auto x : myarray)
    srd::cout << x << ", ";

您也可以使用std::reverse反转它:

int myarray[] {12, 45, 23, 123, 23, 27 };
std::reverse(std::begin(myarray), std::end(myarray));

for(auto e : myarray) 
    std::cout << e << ", ";

答案 2 :(得分:2)

反转算法本身很好,它会旋转中心周围的所有元素,从而反转数组。它相当于使用std::swap函数:

for (int i = 0; i < arraylength / 2; i++) {
    std::swap(myarray[i], myarray[arraylength - i - 1]);
}

但是您正在打印元素之前来反转数组。而且由于i < arraylength / 2条件,你只有一半时间这样做。首先反转数组并引入第二个for循环进行打印:

for(auto el : myarray)
    std::cout << el << ' ';

或者只需使用std::reverse并让标准库解决这个问题:

#include <iostream>
#include <algorithm>

int main() {
    int myarray[] = { 12, 45, 23, 123, 23, 27 };
    std::reverse(std::begin(myarray), std::end(myarray));
    for (auto el : myarray) {
        std::cout << el << ' ';
    }
}

据说myarray[(arraylength - 1) - i];中的括号是一种矫枉过正的行为。您可以将其删除并拥有myarray[arraylength - i - 1];