簡體   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