2016-12-25 41 views
1

我使用下面的std :: vector編碼了一個簡單函數,其中input是一個整數向量,函數根據向量。我應該在明確給出數字時引用std :: vector size

在空間和時間效率方面,以下代碼是否合適? HugeClass實際上是一個大整數,其中包含複雜的算術,而我爲了簡單起見在下面放置了一個簡單的算術。

1),得到矢量

void (HugeClass& huge, std::vector<int>& vec, int dim){ 
    for(int i=0;i<dim;i++){ 
     huge+=vec[i]; 
    } 
} 

2)的尺寸調用一個std :: vector.size()來迭代

void (HugeClass& huge, std::vector<int>& vec){ 
    for(int i=0;i<vec.size();i++){ 
     huge+=vec[i]; 
    } 
} 

暗淡的範圍可以在[100,1000000]

+2

人們有扭曲的思維方式是什麼使得C++程序更快.. –

+0

你可以做'for(int i = 0,ie = vec.size(); i user1139069

回答

1

C++ for循環的語法是:

for (init; condition; increment) { 
    statement(s); 
} 

以下是for循環中的控制流程:

  1. init步驟首先執行,並且只執行一次。這一步允許你聲明和初始化任何循環控制變量。只要出現分號,您無需在此處發表聲明。

  2. 接下來,評估條件。如果它是真的,則循環的主體被執行。如果它是假的,循環的主體不會執行,並且控制流將跳轉到for循環後面的下一個語句。

  3. 執行for循環的主體後,控制流將跳回到increment語句。這個語句允許你更新任何循環控制變量。只要在條件之後出現分號,此語句可以留空。

所以在

for(int i=0;i<vec.size();i++) { 
     huge+=vec[i]; 
} 

vec.size()的情況下,每次調用,但可能內聯,並可能是一個簡單的函數。

在其頂部

一個足夠聰明的優化器可以推斷,這是一個循環不變,無副作用,完全的Elid它(這是比較容易,如果代碼被內聯,但可能連如果它不是如果編譯器做全局優化)

相關問題