第十六章 控制迴圈

2021-06-26 05:43:10 字數 2737 閱讀 7231

第十六章--控制迴圈

16.1--選擇迴圈的種類

1.在大多數語言中,你只能用到少數幾種迴圈:

(1)計數迴圈:執行次數一定。

(2)連續求值的迴圈:預先並不知道將要執行多少次,它會在每次迭代時檢查是否應該結束。

(3)無限迴圈:一旦啟動就一直執行下去。

(4)迭代器迴圈:對容器類裡面的每個元素執行一次操作。

2.什麼時候使用while迴圈

(1)如果你不知道迴圈要執行多少次,那麼就使用while迴圈。

(2)對於在開始處進行檢測的迴圈,可以使用while迴圈(或模擬while迴圈)。

(3)當你需要乙個靈活的迴圈,但是該迴圈至少需要至少執行一次。這種情況下,可以用在結尾處做檢測的迴圈(或模擬這樣的while迴圈)。

3.什麼時候用待退出的迴圈

帶退出的迴圈就是終止條件出現在迴圈中間的迴圈。

(1)正常的帶退出迴圈。使用場合:如果把迴圈條件檢測放在迴圈開始或結束處,那就需要寫出乙個半迴圈的**,此時可用帶退出的迴圈。

在使用這種迴圈的時候,請注意下面細節:

*把所有的退出條件放在一處。

*用注釋來闡明操作意圖。

*待退出的迴圈也是單入單出得結構化控制結構,也是一種首選的迴圈控制。

(2)非正常的帶退出的迴圈。如利用goto語句直接跳到迴圈體中。如果你的語言不支援break命令,那麼可以使用goto來模擬break,但是goto使用要謹慎。

4.何時使用for迴圈

(1)如果你需要乙個執行次數固定的迴圈,那麼for迴圈就是乙個很好的選擇。

(2)可以用for迴圈來執行那些不需要迴圈內部控制的簡單操作。如遞增遞減。

(3)不要在for迴圈裡通過直接修改下標值的方式迫使它終止,在這種情況下應該該改用while迴圈。

(4)for迴圈就是為了簡單的用途,複雜的最好用while。

5.何時使用foreach迴圈

foreach迴圈或其等價物很適用於對陣列或者其他容器的各項元素執行操作。

16.2--迴圈控制

1.迴圈會出現的錯誤大致有下面幾種:

(1)忽略或錯誤地對迴圈執行初始化;

(2)忽略了對累加變數或者其他與迴圈有關的變數執行初始化;

(3)不正確的巢狀;

(4)不正確的迴圈終止;

(5)忽略或者錯誤地增加了迴圈變數的值;

(6)用不正確的迴圈下標訪問素組元素;

解決方法大致有兩種:一是減少能影響該迴圈各種因素的數量,簡化,簡化,再簡化!二是把迴圈內部當做乙個子程式看待--把控制盡可能放在迴圈體外。

2.進入迴圈

在**進入迴圈時,使用下述指導原則:

(1)只從乙個位置進入迴圈。

(2)把初始化**緊放在迴圈前面。

(3)用while(true)表示無限迴圈。

(4)在適當的情況下多使用for迴圈。

(5)在while迴圈更適用的時候,不要使用for迴圈。

3.處理好迴圈體

下面講解如何處理迴圈體:

(1)用「」把迴圈體中的語句括起來。

(2)避免空迴圈。

(3)把迴圈內務操作要麼放在迴圈的開始,要麼放在迴圈的末尾。

(4)乙個迴圈只做一件事。

4.退出迴圈

(1)設法確認迴圈能夠終止。

(2)使迴圈終止條件看起來很明顯。

(3)不要為了終止迴圈而胡亂改動for迴圈的下標。

(4)避免出現依賴於迴圈下標最終取值的**。

(5)考慮使用安全計數器。

5.提前退出迴圈

(1)考慮在while迴圈中使用break語句而不用布林標記。

(2)小心那些有很多break散布其中的迴圈。

(3)在迴圈開始處用continue進行判斷。

(4)如果語言支援,請使用待標號break結構。

(5)使用break和continue時要小心謹慎。break就使閱讀**的人必須去讀迴圈體,才能理解迴圈是如何控制的。

6.檢查端點

對於乙個簡單的迴圈,通常要注意三種情況:開始的情況,任意選擇的中間情況,以及最終的情況。在你建立迴圈的時候,應在腦海裡執行這三種迴圈情況,以確認該迴圈不會出現任何off-by-one(偏差一)錯誤。可以通過手工計算來檢查。

7.使用迴圈變數

下面是使用迴圈變數的一些指導原則:

(1)用整數或者列舉型別表示陣列和迴圈的邊界。

(2)在巢狀迴圈中使用有意義的變數名來提高其可讀性。

(3)用有意義的名字來避免迴圈下標串話。習慣性使用i,j,k有可能會導致下標串話。

(4)把迴圈下標變數的作用域限制在迴圈體。

8.迴圈應該有多長

(1)迴圈要盡可能地短,以便能夠一目了然。

(2)把巢狀限制在3層以內。

(3)把長迴圈的內容移到子程式裡。

(4)要讓長迴圈格外清晰。

16.3--輕鬆建立迴圈--由內而外

一般的處理過程:

(1)在注釋裡寫下迴圈體需要執行的操作步驟。

(2)在還沒有編寫整個迴圈之前,盡可能多地把迴圈體內的注釋轉化成**。

(3)在陣列中加入下標。

(4)給現有語句外面加上一層迴圈。

(5)寫出必要的初始化**。

16.4--迴圈和陣列的關係

迴圈和數字關係密切,很多情況下,迴圈就是用來操縱陣列的。

第十六章 控制迴圈

在大多數語言中,你只能用到少數幾個迴圈 如果你預先並不知道迴圈要迭代多少次,那麼就使用while迴圈。帶退出的迴圈就是終止條件出現在迴圈中間而不是開始或者末尾的迴圈。如果你需要乙個執行次數固定的迴圈,那麼for迴圈就是乙個很好的選擇。for each迴圈或其等價物很適用於對陣列或者其他容器的各項元素...

第十六章 tcp wrappers

在伺服器向外提供的tcp服務上包裝一層安全檢測機制。外來連線請求首先通過這個安全檢測,獲得安全認證後才可被系統服務接受。hosts.allow hosts.deny 在配置檔案中為各服務分別定義訪問控制規則實現訪問控制,檔案中的規則是即時生效的。配置檔案語法 1 daemon list client...

第十六章 執行緒棧

1 基礎 1 執行緒初始化時,執行緒棧預設1m,所有頁面都是page readwrite屬性,但只為前兩個頁面調撥了物理儲存器,位址低的那個頁面叫防護頁面,為其指定了page guard屬性 2 當執行緒訪問到防護頁面時,由於指定了page guard屬性,系統會得到通知,系統會為防護頁面的下乙個頁...