1. 程式人生 > >《C++中的計數方式討論之對稱區間與不對稱區間》

《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 ] 來表示空區間。區間的結束比開始還小,在設計程式時,很可能會引起程式無法結束。