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

What is the difference between function(vector<int> v) and function(vector<int>& v)?

本文关键字:function vector gt lt int 区别 什么      更新时间:2023-10-16

当我尝试在c++中使用向量执行插入排序时,我发现当我使用时,它不执行函数:

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

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

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

有人能解释一下为什么吗?

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

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

基本上通过引用(&)传递给相同的 vector,而通过值传递(no- &)传递给一个向量的副本。如果vector包含很多项目,那么两者之间的性能差异很大。此外,如果要进行插入排序,您可能希望对相同的向量排序,而不是对其进行复制(除非您计划返回复制,否则会导致另一个性能损失)。