声明和使用数组的反向循环中的逻辑错误[关闭]

问题描述 投票:0回答:1

我很难弄清楚在这里做什么,我正在这个实验室工作,但我似乎无法弄清楚这部分。

输出为:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20

20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 20

输出应该是:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20

20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 

我尝试使用临时变量逻辑,但我不知道临时变量应该使用哪个变量。我不知道从这里去哪里 例如:

  // Reverse array
  for (int index = 0; index < DATA_SIZE; index++)
  {   int tempVariable = ??? ; int A; int B; 
   
  data[index] = data[DATA_SIZE-1-index];
  data[DATA_SIZE-1-index] = data[index];
  }
// Print array
 for (int index = 0; index < DATA_SIZE; index++)
  cout << data[index] << " ";
  cout << endl;

》第7步:上面的反向循环有一个逻辑错误,我们不能用两条语句A = B; B = A;交换两个变量A和B的值,一旦我们执行了第一条语句,原始值A 的丢失。为了解决这个问题,我们需要一个临时变量 T 和以下内容:T = A;A = B;B = T;使用这个逻辑来更正反向数组循环并编译和运行程序。你做什么看到了吗?”

c++ arrays for-loop reverse swap
1个回答
0
投票

写的够清楚

我们需要一个临时变量 T 和以下内容:T = A; A = B; B = T

所以写下for循环

// Reverse array
for (int index = 0; index < DATA_SIZE; index++)
{   
    int tempVariable =  data[index]
    data[index] = data[DATA_SIZE-1-index];
    data[DATA_SIZE-1-index] = tempVariable;
}

注意标头

std::swap
中声明了标准C++函数
<utility>
,可以像

一样使用
#include <utility>

//...

// Reverse array
for (int index = 0; index < DATA_SIZE; index++)
{   
    std::swap( data[index], data[DATA_SIZE-1-index] );
}

代替手动编写的for循环,您可以使用标准算法

std::reverse
在标题中声明
<algorithm>

#include <algorithm>

//...

std::reverse( data, data + DATA_SIZE );

#include <iterator>
#include <algorithm>

//...

std::reverse( std::begin( data ), std::end( data ) );

要输出数组,最好使用基于范围的 for 循环

// Print array
for ( const auto &item : data )
{
    std::cout << item << ' ';
}
std::cout << std::endl;
© www.soinside.com 2019 - 2024. All rights reserved.