C++ 如何反转集合数组的顺序

C++ 如何反转集合数组的顺序,c++,arrays,reverse,function-definition,C++,Arrays,Reverse,Function Definition,这是我们班的一个练习,我不确定如何进行需要颠倒顺序的函数 #include <iostream> #include <iomanip> void reverseorder(int[], int); void printout(int[], int); const int SIZE = 10; int main() { int number[SIZE] = {10, 15, 20, 25, 30, 35, 40, 45, 50, 55}; reverseorder(

这是我们班的一个练习,我不确定如何进行需要颠倒顺序的函数

#include <iostream>
#include <iomanip>

void reverseorder(int[], int);
void printout(int[], int);

const int SIZE = 10;

int main()
{
int number[SIZE] = {10, 15, 20, 25, 30, 35, 40, 45, 50, 55};

reverseorder(number, SIZE);
printout(number, SIZE);
}

void reverseorder(int number[], int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {

        number[i] = number[SIZE - i];
        return;
    }
}

void printout(int number[], int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {
        std::cout << number[i] << std::setw(5);
    }
    std::cout << std::endl;
}
#包括
#包括
无效反向顺序(int[],int);
无效打印输出(int[],int);
常数int SIZE=10;
int main()
{
整数[大小]={10,15,20,25,30,35,40,45,50,55};
反向顺序(编号、大小);
打印输出(数量、大小);
}
无效反向顺序(整数编号[],整数大小)
{
对于(int i=0;i
number[i]=number[SIZE-i];

这并不是反转,而是用前面的数字增量替换。当索引
i
到达数组中间时,它将再次开始重复数组的最后半部分。

要反转数组,您需要使用标准函数
std::swap
,或者编写这样的函数自我

此函数

void reverseorder(int number[], int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {

        number[i] = number[SIZE - i];
        return;
    }
}
元素
number[0]
的值将丢失。此外,当i等于0时,数组编号[SIZE-i]的不存在元素将被使用

您需要交换阵列的两半

在该语句中还调用了std::setw

    number[i] = number[SIZE - i];
std::cout << number[i] << std::setw(5);
程序输出为

10 15 20 25 30 35 40 45 50 55 
55 50 45 40 35 30 25 20 15 10 
如果您可能不使用std::swap,那么在循环中写入就是一个例子

    for ( size_t i = 0; i < n / 2; i++ )
    {
        int tmp = a[i];
        a[i] = a[n-i-1];
        a[n-i-1] = tmp;
    }
(大小i=0;i { int tmp=a[i]; a[i]=a[n-i-1]; a[n-i-1]=tmp; }
如果允许您使用STL,您可以这样做

void reverseorder(int number[], int SIZE)
{
    std::reverse(number, number + SIZE);
}
void reverse(int*num,int size){

对于(int i=0;iThanks Vlad我现在就去试试!没有std::swap工具有什么方法可以做到吗?你的方法完全有效,但我们在我上的课上还没有了解到这一点,我猜教授不想让我在这个练习中使用它,因为它会破坏目的。我将研究std::swap,看看我是否能理解我们知道如何在不使用它的情况下编写代码,但同时基本上使用它,如果这样做sense@SalvGi我们,初学者,应该互相帮助,:)来自Mowcow还有,我最终做的不是std::swap,而是我自己做了一个简单的swap函数。void swap(int&n1,int&n2){int tmp;tmp=n1;n1=n2;n2=tmp;return;}@SalvGi是的,您可以编写这样一个声明的函数,例如voidswap(int&a,int&b);在函数体中,您可以放置与我在答案中显示的代码类似的代码。我怀疑他希望我使用该代码,否则此练习会容易得多!感谢您向我展示该代码,尽管我相信它在将来会派上用场!与您的教授确认是否确实不允许这样做。他们可能不会阻止您,因为很简单。很简单是好的:)评论不适合长时间的讨论;这段对话已经结束了。
void reverseorder(int number[], int SIZE)
{
    std::reverse(number, number + SIZE);
}
void reverse(int *num,int size){
    for(int i = 0;i<(size)/2;i++){
        const int temp = num[i];
        num[i] = num[size-i-1];
        num[size-i-1] = temp;
    }
}