function(vector <int> v)和function(vector <int>&amp; v)之间有什么区别?

时间:2015-07-21 15:26:17

标签: c++ function vector

在尝试使用C ++中的向量进行插入排序时,我发现当我使用它时,它没有执行该功能:

void ins_sort(vector<int> v){
    //function body
}

然而,当我做了以下工作时,它起了作用:

void ins_sort(vector<int>& v){
    //function body
}

有人可以解释一下原因吗?

2 个答案:

答案 0 :(得分:2)

&允许您通过引用传递参数。也就是说,您可以在函数体中修改它们,并在调用函数后仍然看到它们被修改。

如果没有&,则按值传递参数。也就是说,矢量将被复制,你将在函数内部使用矢量的副本。函数结束后,您将再次使用原始向量。

答案 1 :(得分:0)

基本上通过引用(&)传递相同的 vector,而传递值(不 - &)传递副本< / em>向量。如果vector包含大量项目,那么两者之间存在显着的性能差异。此外,如果该点正在进行插入排序,您可能希望对相同的向量进行排序,而不是对副本进行排序(除非您计划返回副本,这将导致另一次性能损失)