簡體   English   中英

C ++中的數組副本反轉

[英]array copy reversal in c++

有沒有一種方法可以通過使用c ++中的while循環以相反的順序將數組復制到另一種方法? 我很確定我知道如何使用for循環,但是我很好奇是否有人知道使用while循環的方法

為什么不這樣呢?

#include <algorithm>

int src[] = {1, 2, 3, 4, 5};
int dst[5];

std::reverse_copy(src, src+5, dst);
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++;
}  

正如您已經說過使用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--;
}

您可以使用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

最近有一些與此類似的問題。 我想知道這是家庭作業還是面試問題。 這是一個答案:

#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--之類的表達式進行評估的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM