我有兩個相關的問題,一個是通用的,另一個是針對我正在開發的項目的。循環,功能設計和效率:兩個問題
- 通常,如果我有很多次迭代(百萬)在特定條件下被執行的代碼的某些部分的循環,豈不是更好(更有效)有一個循環多個條件語句或多個循環,而不他們。例如。
例1:
while (something())
{
// some common code
if (condition_a)
// some code
if (condition_b)
// some code
// some more common code
}
例2:
if (condition_a && condition_b)
{
while (something())
{
// some common and specific code
}
}
else if (condition_a)
while (something()) //..
else if (condition_b)
// Another loop
else //...
好像實施例2將導致在冗餘的成本更有效的代碼,因爲條件檢查一次,而不是百萬次。如果通用代碼很大或者有很多可能的條件,這看起來非常多餘。
現在我的具體問題。我有一個從文件中讀取點並將它們插入到數據結構中的函數。它看起來是這樣的:
而(閱讀器 - > read_point) {// 做一些東西 //插入點 }
的問題是,有幾個函數用於讀取根據用戶提供的標準應該使用的點。例如,read_point_inside_circle(),read_point_inside_rectangle()等。
理想情況下,我想事先使用函數指針來決定正確的函數,但我不認爲這是可能的,因爲reader是一個Reader類的實例如果有可能以某種方式解決我所有的問題)。
在這種情況下,如果我有多個只有條件不同的循環,或者我應該使用多個if語句來避免冗餘代碼,
for(;;)
{
if (read_every_point)
if(!reader->read_point())
break;
else if (read_inside_circle)
if(!reader->read_inside_circle())
break;
else if // ...
}
我懷疑第一個會對現代編譯器有什麼影響。我會選擇更可讀的,並讓編譯器爲我優化。 – amit