问题描述
void fun(vector<int>vec)
{
some code
}
int main()
{
int n = 5;
vector<int>avec(n);
fun(avec);
}
通过值传递和引用传递将大小为 n
的 Vector 传递给另一个函数的时间复杂度是多少?
这段代码只传递一个向量的时间复杂度是多少?
解决方法
将大小为 std::vector
的 N
按值传递给函数显然具有线性复杂度 O(n)
,因为它涉及复制 N
对象。通过引用传递具有复杂性 O(1)
,因为实际上只有 std::vector
的地址被传递给函数,而不管它的大小。
值得注意的是,从函数返回std::vector
的情况有所不同,在这种情况下,按值返回的复杂度为O(1)
,因为在这种情况下编译器要么使用{ {3}} ,如果允许,或 copy elision
构造函数。两者都有 O(1)
复杂性。