function(vector v)<int>和function(vector<int>& v)有什么区别?
What is the difference between function(vector<int> v) and function(vector<int>& v)?
当我尝试在c++中使用向量执行插入排序时,我发现当我使用时,它不执行函数:
void ins_sort(vector<int> v){
//function body
}
然而,当我做以下操作时,它工作了:
void ins_sort(vector<int>& v){
//function body
}
有人能解释一下为什么吗?
&
允许您通过引用传递参数。也就是说,您可以在函数体中修改它们,并且在调用函数之后仍然可以看到它们被修改。
如果没有&
,则按值传递参数。也就是说,将复制向量,并且在函数内部使用向量的副本。函数结束后,您将再次使用原始向量。
基本上通过引用(&
)传递给相同的 vector
,而通过值传递(no- &
)传递给一个向量的副本。如果vector
包含很多项目,那么两者之间的性能差异很大。此外,如果要进行插入排序,您可能希望对相同的向量排序,而不是对其进行复制(除非您计划返回复制,否则会导致另一个性能损失)。
相关文章:
- "error: no matching function for call to"构造函数错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- "no matching function for call to 'Vector::Vector'"错误
- Vector, assign() function Undefined Behavior
- C++从 std::vector<std::function<中删除 std::function>>
- C++:具有 const int 的类的 vector.erase 实例给出"attempting to reference a deleted function"错误 C2280
- 将lambdas/functions存储在std::vector中,而不使用std::function
- 删除绑定到成员函数的 vector<std::function<...>> 的任何元素
- C++ std::vector 作为 std::function 的参数
- 从 std::vector c++ 调用 std::function 时崩溃
- C++ vector.erase() function bug
- c++将Lambdas与vector中的Function指针区分开来
- 用于初始化 std::vector<std::function<bool(std::string)的初始值设定项列表> >在 g++ 4.9.0 中出错,但使用 Visual
- 使用 std::vector<boost::function> with boost::bind
- 从std::function的vector对象中移除一个元素
- function(vector v)<int>和function(vector<int>& v)有什么区别?
- 为什么我不能让 std::function<std::vector<T>::iterator> 绑定到返回该类型的 lambda?
- 无法使用统一初始化复制 std::vector<std::function<void ()>>。这是对的吗?