为什么swap()有时通过传递数组来实现?

Fas*_*ish 7 c c++ algorithm computer-science

在一些comp-sci论文和测试中,我看到swap()实现如下:

void swap(int x, int y, int *a)
{
    int t = a[x];
    a[x] = a[y];
    a[y] = t;
}
Run Code Online (Sandbox Code Playgroud)

为什么不简单地实现它:

void swap(int& x, int& y)
{
    int t = x;
    x = y;
    y = t;
}
Run Code Online (Sandbox Code Playgroud)

通过不必为前两个参数索引数组,前者的想法是使调用代码更清晰吗?我意识到这不是一个非常重要的问题,因为我们应该使用std :: swap(),但我仍然很好奇.

Meh*_*ari 6

并非所有编程语言都支持通过引用调用.例如,后一种做法swap不适用于Java.

在包含伪代码的书籍中,通常有一种约定,即传递时不会复制数组和指针,而是在函数调用中复制其他所有内容.前一种方式不需要关于参数传递方式的特殊解释.

关于你关于清洁的最后一点,它并没有太大的不同:在前一种情况下,你对交换的调用将是简单的:swap(i, j, a);而在后一种情况下,你必须swap(a[i], a[j]);在表达式中引入一些括号.