如何反转集合数组的顺序

How to reverse order of a set array

这是我 class 的练习,我不确定如何处理需要倒序的函数。

#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;
}

我知道 fnc void reverseorder(int number[], int SIZE) 是不正确的,因为这是唯一需要做的事情。如果您知道答案但不想直接告诉我,那么任何提示也将不胜感激!谢谢大家

编辑:目前的输出是: SalvGis-MBP:c++ 编程$ ./a.out 503709838 15 20 25 30 35 40 45 50 55

但我希望它是 55 50 45 40 35 30 25 20 15 10

不确定为什么要生成 503709838。有人提到第一次迭代被破坏,这可能解释了它。

这一行:

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[i] = number[SIZE - i];

元素 number[0] 的值将完全丢失。此外,当 i 等于 0.

时,使用了数组 number[SIZE - i] 中不存在的元素

你需要交换数组的两半。

还有std::setw这个语句中的调用

std::cout << number[i] << std::setw(5);

没有意义。此调用应放在输出表达式 number[i].

之前

注意这两个函数的第二个参数应该是size_t类型,输出数组的函数的第一个参数应该有修饰符const,因为在函数中使用数组未更改。

给你。

#include <iostream>
#include <utility>

void reverseorder( int a[], size_t n )
{
    for ( size_t i = 0; i < n / 2; i++ )
    {
        std::swap( a[i], a[n-i-1] );
    }
}

std::ostream & printout( const int a[], size_t n, std::ostream &os = std::cout )
{
    for ( size_t i = 0; i < n; i++ )
    {
        os << a[i] << ' ';
    }

    return os;
}


int main() 
{
    int number[] = {10, 15, 20, 25, 30, 35, 40, 45, 50, 55};
    const size_t N = sizeof( number ) / sizeof( *number );

    printout( number, N ) << '\n';

    reverseorder( number, N );

    printout( number, N ) << '\n';

    return 0;
}

程序输出为

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;
    }

如果你被允许使用STL,你可以这样做

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;
    }
}

num是指向数组的指针,size是数组的大小, temp 是一个变量,它保存一个值来交换第一个元素和最后一个元素 第二个元素是 last-1 .... 我们需要重复这个(数组大小)/2 次