微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决通过按值传递和按引用传递将大小为 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) 复杂性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。