在一些comp-sci论文和测试中,我看到swap()实现如下:
void swap(int x, int y, int *a)
{
int t = a[x];
a[x] = a[y];
a[y] = t;
}
为什么不像这样简单地实现它:
void swap(int& x, int& y)
{
int t = x;
x = y;
y = t;
}
前者的想法是使调用代码更整洁,而不必索引到前两个参数的数组中吗?我意识到这不是一个非常重要的问题,因为我们应该使用std::swap(),但我仍然很好奇。
发布于 2010-11-28 05:35:48
并非所有编程语言都支持按引用调用。例如,后一种执行swap
的方式不适用于Java。
在包含伪代码的书中,通常有一个约定,传递时不复制数组和指针,而在函数调用中复制其他所有内容。前一种方法不需要对传递参数的方式进行特殊解释。
关于整洁的最后一点,这并没有太大的不同:在前一种情况下,您对交换的调用将是简单的:swap(i, j, a);
,而在后一种情况下,您将不得不swap(a[i], a[j]);
,在表达式中引入一些括号。
发布于 2010-11-28 05:40:12
您的第二个代码示例是C++,而不是C。C++支持引用参数,但C只支持通过指针间接引用。
我同意第二个实现更干净。为了使其在C中工作,请将每个参数中的&
更改为*
,并取消对函数中每个x
和y
(也使用*
)的引用。
https://stackoverflow.com/questions/4294023
复制相似问题