【发布时间】:2015-07-04 06:06:54
【问题描述】:
当我用指针算术和!=做一个过程时,比如
template <typename T> void reverse_array ( T * arr, size_t n )
{
T * end = arr + n;
while (arr != end && arr != --end)
{
swap(arr,end);
++arr;
}
}
我总是非常小心,因为如果我写错了我的程序,那么在极端情况下,第一个指针可能会“跳过”第二个指针。但是,如果数组是这样的
&arr[0] < &arr[1] < ... < &arr[n]
对于任何长度为n-1 的数组arr,那么我不能做类似的事情
template <typename T> void reverse_array ( T * arr, size_t n )
{
T * end = arr + n;
if (arr == end) break;
--end;
while (arr < end)
{
swap(arr,end);
++arr; --end;
}
}
因为它更具可读性?还是有危险迫在眉睫?内存地址不只是整数类型,因此可以与< 媲美吗?
【问题讨论】:
-
我建议您在其他地方执行
--end,而不是作为while语句的停止条件的一部分。它将使您的代码更具可读性,并有助于避免对end在该条件内以及循环本身内的值的怀疑。如果您确实需要在语句中测试这两个条件,请使用end-1(并在循环内部递减它)。 -
是的,它有效。我不知道
n应该是什么,但如果你想要下一个元素,你最好使用 +1。