簡體   English   中英

C ++中基於范圍的for的性能

[英]Performance of range-based for in C++

假設xvector<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

是的,第二個for快。 大向量很多。 進行測試非常容易:

http://quick-bench.com/hR5VI3JwybDC0eBra6u8Ytd3uZ8

基准結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM