C++ 牌堆與子牌堆

2023-03-20 16:24 更新

請看函數(shù)findBisect的接口:

int findBisect (const Card& card, const apvector<Card>& deck,int low, int high) {

把三個參數(shù)deck,low和high看作指定一個子牌堆的單一參數(shù)是可以說得通的。

這種事情很常見,有時我把它當作抽象參數(shù)。所謂”抽象“,我指的是在更高層次上描述函數(shù),并非程序代碼的字面意思。

例如,當以向量以及用以限界的low和high為參數(shù)調(diào)用函數(shù)時,其實根本沒辦法限制函數(shù)中訪問界限之外的元素。所以我們并沒有像字面上說的那樣傳遞了子牌堆,但是只要被調(diào)函數(shù)按規(guī)矩辦事, 抽象的將參數(shù)當做子牌堆是有意義的。

還有一個例子,你可能已經(jīng)注意到了,在9.3節(jié),我提到“空”數(shù)據(jù)結(jié)構(gòu)時也用到了這種抽象?!翱铡鄙系囊柧褪菫榱颂嵝炎x者,這并非是字面意義上真正的空。所有的變量自始至終都是有值的。創(chuàng)建變量之時,它們會有默認值。所以沒有空對象這樣的東西。

但是,如果程序確保變量的當前值在寫之前從未被讀過,則當前值是無意義的值。抽象地講,把這種變量當做”空“值是說得通的。

這種思考方式——即程序帶上了超出編碼字面意思之外的意義——是像計算機科學(xué)家一樣思考問題的一個重要部分。有時,”抽象“這個詞用的太多、太雜,可能難以解釋。盡管如此,抽象仍然是計算機科學(xué)(以及很多其他領(lǐng)域)的一個中心思想。

“抽象”的一個更一般的定義是“為了抓住重要行為且抑制不必要的細節(jié),使用簡單的描述建模復(fù)雜系統(tǒng)的過程”。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號