【发布时间】:2011-05-13 14:26:25
【问题描述】:
有没有办法通过在 c++ 中使用 while 循环以相反的顺序将数组复制到另一种方式? 我很确定我知道如何使用 for 循环,但我很好奇是否有人知道使用 while 循环的方法
【问题讨论】:
有没有办法通过在 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++;
}
【讨论】:
(place >= 0) 并且您只增加 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, }
【讨论】:
最近有几个类似的问题。我想知道这是作业还是某个地方的面试问题。这是一个答案:
#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-- 等表达式何时被评估。
【讨论】: