如何反转集合数组的顺序
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 次
这是我 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.
你需要交换数组的两半。
还有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 次