反向c ++数组

时间:2012-02-24 01:56:25

标签: c++

我的目标是将阵列3,12,2,1反转为1,2,12,3。当我运行此代码时,我在实际结果之前得到了垃圾。我似乎无法看到问题在哪里请帮助

#include<iostream>
using namespace std;


int rev (int arr[], int a){
    //int r;
    for(int i =a-1; i>=0; i--){
    cout<<arr[i]<<" "; 
    }   
   return 0;
 }

 int main(){
 int arr[] = {6,41,12,5,2};

cout<<"The rev of {6,41,12,5,2}"<<endl;
 cout<<rev(arr, sizeof(arr))<<endl;


   system("pause");
   return 0;
}

6 个答案:

答案 0 :(得分:3)

问题的优化答案是使用STL的reverse()如果你被允许使用它:

std::reverse 

http://www.sgi.com/tech/stl/reverse.html

int main()
{
    int arr[] = {6,41,12,5,2};
    cout<<"The rev of {6,41,12,5,2}"<<endl;
    reverse(arr, arr + 5);
    copy(arr, arr + 5, ostream_iterator<int>(cout, ", "));
}

答案 1 :(得分:3)

使用sizeof(arr)/sizeof(arr[0])代替sizeof(arr)

sizeof(arr)给出了数组的总大小。 sizeof(arr[0])是一个数组元素的大小(所有元素都具有相同的大小)。所以sizeof(arr)/sizeof(arr[0])是元素的数量。

答案 2 :(得分:1)

sizeof以字节为单位返回大小。在您的示例中,如果sizeof(int)= 4,则返回20.

答案 3 :(得分:0)

因为您正在使用数组,所以您还必须保持数组的大小。 sizeof计算内存中值的大小,在本例中是用于表示arr的所有内存的大小。您可以执行sizeof(arr)/sizeof(int)以获取数组中的元素数量。这是有道理的,因为它取数组的总大小并将其除以数组中元素的大小。但请注意,这仅适用于数组(int arr[4] = {6,41,12,5,2};)。如果它是通过诸如int* i = new int[4];之类的堆分配数组的指针,则需要保持数组的大小不变。

此外,您正在cout<<调用中调用反向函数,该调用将打印函数的返回值(在这种情况下,它将硬编码为0)。

事实证明,C ++标准库(std::reverse)中有一个函数可以做到这一点。

答案 4 :(得分:0)

如果我可以主观并且以偏离主题的方式谈论你的方法,那就非常不像C一样。我个人最喜欢的反转数组的方法是这样的:

void reverse(int *a, int n)
{
   int *p = a, *q = a + n - 1;

   while (p < q)
   {
      int swap = *p;
      *p++ = *q;
      *q-- = swap;
   }
}

// Usage:

   int a [] = { /* ... */ };

   reverse(a, sizeof(a)/sizeof(*a));

当然,由于您的问题被标记为c++,因此总是std::reverse()

答案 5 :(得分:0)

sizeof运算符返回一个额外的(arrayLength + 1)这里6将返回当它传递6时它存储在a-1中你得到5但是数组索引从0开始 - 1从0到4这里我指向索引5不是最后一个元素的最后+ 1,表示你有垃圾值的原因