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

标签 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(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。有人提到第一次迭代被破坏,这可能解释了这一点。

最佳答案

要反转数组,您需要使用标准函数 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;
    }

关于c++ - 如何反转集合数组的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61108937/

相关文章:

java - 面向对象项目的例子帮助程序程序员

javascript - ReverseArrayInPlace 奇怪的错误?

python - 适用于 numpy 数组和 pandas 数据帧的列切片方法

ios - 如何在 Swift 4 中向数组追加或添加多个项目

c++ - mergesort C++ 实现越界索引访问

scala - 如何反转/翻转/反转/交换 scala 的选项?

android - 反向搜索栏(从右到左)颜色

c++ - 为什么这个函数调用没有歧义?

c++ - 删除 [] 时出现段错误

c++ - `contains` 的恒定时间 `std::vector` ?