反转数组,但仅返回一个元素

时间:2019-03-13 14:33:57

标签: c++ arrays

我正在尝试反转数组,我认为for循环是错误的,但是我向它展示的每个人都没有看到问题。

#include <iostream>

void reverse() {
  int temp;
  const int size = 9;
  int arr[size] = {1, 4, 10, 16, 34, 7, 8, 9, 11};
  for (int i=0; i <size-1; i++){
    for (int j=size-1; j>=0; j--){
      arr[j]= temp;
      arr[i] = temp;
    }
  }
  for(int x= 0; x<size; x++){
    std::cout<<arr[x]<< " ";
  }
}

int main () {

  reverse();
  return 0;
}

5 个答案:

答案 0 :(得分:2)

我建议您使用std的算法,即std::reverse。您不必发明一种可以还原数组的算法。

因此您的代码减少为

#include <iostream>
#include <array>
#include <algorithm>

void reverse() {
    std::array<int, 9> arr{1, 4, 10, 16, 34, 7, 8, 9, 11};
    std::reverse(arr.begin(), arr.end());
    for (const auto& item : arr) {
        std::cout << item << " ";
    }
}

int main() {
    reverse();
    return 0;
}

从标准库中选择适当的容器和算法将大大提高质量(在错误,可读性等方面)并加快开发速度。此外,在大多数情况下,程序的运行时间也会缩短。

答案 1 :(得分:1)

这会更快。您只需遍历数组的一半并切换元素就不进行n²遍历,这在此绝对不是必需的。

void reverse() {
  const int size = 9;
  int arr[size] = {1, 4, 10, 16, 34, 7, 8, 9, 11};

  int back = size - 1;
  int temp;
  for( int i = 0; i < size / 2; ++i)
  {
     temp = arr[i];
     arr[i] = arr[back];
     arr[back--] = temp;
  }
  for( auto n : arr )
    std::cout << n << " ";
  std::cout << std::endl;

}

您的代码:

void reverse() {
  int temp;
  const int size = 9;
  int arr[size] = {1, 4, 10, 16, 34, 7, 8, 9, 11};
  for (int i=0; i <size-1; i++){
    for (int j=size-1; j>=0; j--){ // here every element is set to 
    // temp, but temp isn initialized so they are set to a random value. 
    // Try setting temp to 0 and look what happens your whole array should 
    // become 0.
      arr[j]= temp; 
      arr[i] = temp;
    }
  }
  for(int x= 0; x<size; x++){
    std::cout<<arr[x]<< " ";
  }
}

答案 2 :(得分:1)

    #include<iostream> 
    using namespace std;
    void reverse() {
      int temp;
      const int size = 9;
      int arr[size] = {1, 4, 10, 16, 34, 7, 8, 9, 11};
      for (int i=0, j =size-1; i <j ; i++, j--)
      {
        temp = arr[i];
        arr[i] =  arr[j];
        arr[j] = temp;
      }
      for(int x= 0; x<size; x++){
        std::cout<<arr[x]<< " ";
      }
    }

    int main () {

      reverse();
      return 0;
    }

答案 3 :(得分:1)

代码中的变量“ temp”未初始化。

//我想这就是你要做的。

temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;

答案 4 :(得分:1)

选中此选项以反转ur数组。

#include <iostream>
using namespace std;
void reverse() {
  int temp;
  const int size = 9;
  int arr[size] = {1, 4, 10, 16, 34, 7, 8, 9, 11};
  for (int i=8; i>=0; i--){


//   cout<<arr[i]<< " ";
   std::cout<<arr[i]<< " ";
  }

}

int main () {

  reverse();
  return 0;
}

enter image description here