繁体   English   中英

在C ++中通过引用修改此操作的开销是多少?

[英]What is the overhead of this operation to modify by reference in C++?

假设有一个名为second的大型向量,现在我希望我自己的向量first指向大向量。 我写了这段代码:

#include <iostream>
#include <vector>

std::vector<int> second (100000,100);
void modify(std::vector<int>& i) {
  i = second;
}
int main ()
{
  std::vector<int> first(1, 1); 
  modify(first);    
  return 0;
}

是否存在modify功能的开销? second内容克隆到一个新数组然后传递到first ,或者它只是通过引用传递而且开销可以忽略不计?

是的,这将复制 整个矢量 ,复杂度是second大小的线性,如参考文献中所述。

作为函数参数传递引用所避免的是first复制到参数i 换句话说,如果你的函数是这样的(通过值传递向量 - 这将改变函数的语义):

// more expensive!
void modify(std::vector<int> i) {
  i = second;
}

然后你会支付first复制到i的费用,再加first second复制到i的费用。 当然在你的代码中,这没什么区别,因为i很小,但一般来说,通过引用传递大对象是一个好习惯,以避免不必要的副本。


提示:研究移动语义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM