哪种代码在内存/时间复杂度方面更高效
据说当我们将数组传递给函数时,只会将该数组的副本传递给函数。如果我们修改该函数内的数组,那么原始数组也会受到影响。那么与情况 2 相比,情况 1 会占用相同的内存还是会消耗更高的内存?
//Case 1:-
int sum(vector<int> v)
{
...
}
//Case 2:-
int sum(vector<int> &v)
{
...
}
回答
你传递的是一个std::vector,而不是一个数组。第一种情况将获取该向量的副本(将所有元素复制到 的新实例std::vector<int>),而第二种情况将仅获取对原始向量的引用。
很明显,第二种情况比第一种情况更有效(在性能和内存方面),因为不会进行复制并且最终不会有两个向量。
但更好(不是为了性能而是为了代码设计)
int sum(const std::vector<int> &v)
{
...
}
因为你没有修改向量。
PS:为什么是“使用命名空间标准;” 被认为是不好的做法