《C++中的計數方式討論之對稱區間與不對稱區間》

        很多經驗豐富的程序員都有一個習慣,也許看起來很奇怪:他們的程序在計數時總是從0開始,而不是從1開始。比如下面的兩個程序,我們會看到:

for(int r=0;r!=rows;++r){
    //write a row
}

我們也許會把這個循環寫作:

for(int r=1;r<=rows;++r){
    //write a row
}

       上面兩個for循環中,其中一個從0開始計數,而且使用!=操作符來比較,另一個從1開始計數,而且使用<=操作符來比較。當然這兩種方法循環的次數是相同的。有什麼理由讓我們更應該選擇其中的哪一種呢?

        選擇從0開始計數的一個理由是,這樣計數可以鼓勵用我們使用不對稱的區間來表間隔。比如,使用區間 [ 0 , rows ) 來描述第一個for語句是很自然的,就像使用區間 [ 1 , rows ] 來描述第二個for語句一樣。

        一般來說,不對稱區間比對稱區間容易使用,這是因爲一個很重要的性質:[ m , n ) 形式的區間有 n-m 個元素,而 [ m , n ] 形式的區間卻有 n-m+1 個元素。正因爲如此,比如, [ 0 , rows ) 元素個數是顯而易見的(rows-0或者乾脆就是rows),但 [ 1 , rows ] 的元素卻不是那麼容易就看的出來。       

       不對稱區間和對稱區間行爲上的不同在空區間上十分明顯:如果我們使用不對稱區間,我們可以使用 [ n , n ) 表示空區間,但如果使用對稱區間,就要使用 [ n , n-1 ] 來表示空區間。區間的結束比開始還小,在設計程序時,很可能會引起程序無法結束。

         

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章