[英]Performance of range-based for in C++
假設x
是vector<vector<int>>
,我想計算x
的每個元素的大小之和。 這是一個愚蠢的示例,但是我想問一下,當x
的元素的大小足夠大時,上述方法是否等效於性能。
// The first method:
int sum = 0;
for (vector<int> it : x)
sum += it.size();
// The second method:
int sum = 0;
for (vector<int>& it : x)
sum += it.size();
我認為for
的第二個更快,因為它使用&
,因此x
的每個元素的值都不會復制到it
。 我是對的還是兩種方法執行的都一樣?
是的,沒錯。 當使用auto
時,意外復制到有范圍的for循環變量是一個特別常見的問題:
for (auto it : x)
sum += it.size();
這是低效的,因為即使使用auto
來自動設置類型,並且即使迭代是在vector&
s的集合上, it
最終會具有vector
類型。 (解決方案將是auto&
,甚至更好的是auto const&
。)
順便說一句,這里的主要表現匯將不只是從內部元素的復制x
來臨時it
,但分配和釋放所使用的內存的it
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.