обращение копии массива в с ++ - PullRequest
0 голосов
/ 13 мая 2011

Есть ли способ скопировать массив другим способом в обратном порядке, используя цикл while в c ++ ??Я почти уверен, что знаю, как это сделать с циклом for, но мне любопытно, если кто-нибудь знает способ с помощью цикла while

Ответы [ 5 ]

6 голосов
/ 13 мая 2011

Почему бы не что-то подобное?

#include <algorithm>

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

std::reverse_copy(src, src+5, dst);
1 голос
/ 13 мая 2011

Как вы уже сказали, что вы использовали цикл 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--;
}
1 голос
/ 13 мая 2011
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++;
}  
0 голосов
/ 13 мая 2011

В последнее время было несколько подобных вопросов. Интересно, это домашняя работа или вопрос об интервью где-нибудь. Вот один ответ:

#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--.

0 голосов
/ 13 мая 2011

Вы можете использовать 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

...