【问题标题】:array copy reversal in c++C ++中的数组复制反转
【发布时间】:2011-05-13 14:26:25
【问题描述】:

有没有办法通过在 c++ 中使用 while 循环以相反的顺序将数组复制到另一种方式? 我很确定我知道如何使用 for 循环,但我很好奇是否有人知道使用 while 循环的方法

【问题讨论】:

    标签: c++ arrays copy reverse


    【解决方案1】:

    为什么不这样呢?

    #include <algorithm>
    
    int src[] = {1, 2, 3, 4, 5};
    int dst[5];
    
    std::reverse_copy(src, src+5, dst);
    

    【讨论】:

      【解决方案2】:
      int anArray = {1, 2, 3, 4, 5};
      int reverseArray[5];
      int count = 4;
      int place = 0;
      while(place < 5) {
        reverseArray[place] = anArray[count];
        count--;
        place++;
      }  
      

      【讨论】:

      • -1 如果终止条件是 (place &gt;= 0) 并且您只增加 place 您的循环将如何退出。
      • 已修复,做了一些更改但忘记更改了。
      • 好的,删除 -1,因为你编辑它。当心,其他人可能不那么友善;-)
      • @Jordonias:还有两个要走。
      • @cpx:我看到了不必要的 && 的可能性。如果还有什么我想念的。
      【解决方案3】:

      正如您所说,您已经使用for 循环,您可以按照以下步骤将其转换为while 循环。

      for(int i = sizeof(arr) - 1; i >= 0; i--)
      {
        // your logic
      }
      

      现在将其转换为,

      int i = sizeof(arr);
      for(; i >= 0; )
      {
        // your logic
        i--;
      }
      

      只需将for 替换为while 并删除大括号内的;

      int i = sizeof(arr);
      while(i >= 0)
      {
        // your logic
        i--;
      }
      

      【讨论】:

      • sizeof(arr) 仅在元素为 1 字节长时返回数组中元素的数量,否则,很好的解释。
      • ... 如果 arr 真的是一个数组而不是指针或任何类型的容器。
      • @all,同意 cmets,但这只是解释循环转换的伪代码。
      【解决方案4】:

      您可以使用std::reverse 反转相同的数组,使用std::reverse_copy 反转到另一个输出数组:

      int main() {
              int a[]= {1,2,3,4,5,6,7,8,9,10};
              const int size = sizeof(a)/sizeof(int);
              int b[size];
      
              //copying reverse to another array
              reverse_copy(a, a + size, b);
              cout << "b = {";
              copy(b, b + size, ostream_iterator<int>(cout, ", "));
              cout << "}" << endl;
      
              //reverse the same array
              reverse(a, a + size);
              cout << "a = {";
              copy(a, a + size, ostream_iterator<int>(cout, ", "));
              cout << "}" << endl;
              return 0;
      }
      

      输出:

      b = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, }
      a = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, }
      

      演示:http://www.ideone.com/Fe5uj

      【讨论】:

      • 在这很酷之前从未遇到过那个 ideone 网站!
      【解决方案5】:

      最近有几个类似的问题。我想知道这是作业还是某个地方的面试问题。这是一个答案:

      #define ELEMENT_COUNT(a) (sizeof((a))/sizeof((a)[0]))
      
      
      int anArray[] = { 1, 2, 3, 4, 5 };
      int reverseArray[ELEMENT_COUNT(anArray)];
      int n = ELEMENT_COUNT(anArray);
      int i = 0;
      while(n--)
          reverseArray[i++] = anArray[n];
      

      我想看看你是否理解 i++ 和 n-- 等表达式何时被评估。

      【讨论】:

        猜你喜欢
        • 2018-02-09
        • 1970-01-01
        • 2013-01-11
        • 2022-01-25
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多