【问题标题】:What is the difference between function(vector<int> v) and function(vector<int>& v)? [duplicate]function(vector<int> v) 和 function(vector<int>& v) 有什么区别? [复制]
【发布时间】:2015-07-21 15:26:17
【问题描述】:

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

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

而当我执行以下操作时,它起作用了:

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

谁能解释一下原因?

【问题讨论】:

  • 按值传递与按引用传递
  • 带有vector &,您传递的引用本身就是原始的。而使用 vector 您只需创建一个副本(按值传递)

标签: c++ function vector


【解决方案1】:

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

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

【讨论】:

  • 没错,我会编辑的。
【解决方案2】:

基本上按引用传递(&amp;)传递相同vector,而按值传递(no-&amp;)传递一个向量的副本 .如果vector 包含很多项目,那么两者之间存在显着的性能差异。此外,如果该点正在执行插入排序,您可能希望对 same 向量进行排序,而不是副本(除非您打算返回副本,这将导致另一个性能损失) .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-30
    • 2021-07-30
    • 2022-01-13
    • 2021-08-26
    • 2021-11-07
    • 1970-01-01
    • 2020-12-27
    • 2020-07-15
    相关资源
    最近更新 更多