通过按值传递和按引用传递将大小为 n 的 Vector 传递给另一个函数的时间复杂度是多少?

问题描述

void fun(vector<int>vec)
{
   some code
}
int main()
{
   int n = 5;
   vector<int>avec(n);
   fun(avec);
}

通过值传递和引用传递将大小为 n 的 Vector 传递给另一个函数的时间复杂度是多少? 这段代码只传递一个向量的时间复杂度是多少?

解决方法

将大小为 std::vectorN 按值传递给函数显然具有线性复杂度 O(n),因为它涉及复制 N 对象。通过引用传递具有复杂性 O(1),因为实际上只有 std::vector 的地址被传递给函数,而不管它的大小。

值得注意的是,从函数返回std::vector的情况有所不同,在这种情况下,按值返回的复杂度为O(1),因为在这种情况下编译器要么使用{ {3}} ,如果允许,或 copy elision 构造函数。两者都有 O(1) 复杂性。