W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
我們應該如何表示一手牌或者一副牌的某個子集呢?很容易的選擇就是創(chuàng)建一個少于52張紙牌的Deck對象。
我們可能需要一個subdeck函數,它以一個紙牌向量和索引的區(qū)間為參數,返回值是一個新的向量,其中包括了牌堆中指定的子集:
Deck Deck::subdeck (int low, int high) const {
Deck sub (high-low+1);
for (int i = 0; i<sub.cards.length(); i++) {
sub.cards[i] = cards[low+i];
}
return sub;
}
我們使用Deck的構造函數創(chuàng)建局部變量subdeck(譯者注:參考代碼,這里應該是sub,下同),其參數為牌堆大小,這里沒有對其中的紙牌進行初始化,其初始化是通過復制原始牌堆中的紙牌完成的。
subdeck的長度是high-low+1,因為區(qū)間下界和上界的牌都包括在其中。這個計算雖然簡短但還是容易讓人迷惑,進而導致“差一錯誤”。要避免這種錯誤,最好通過畫圖來輔助理解。
作為練習,請編寫另一個版本的findBisect函數,它以一個子牌堆為參數,而不是以一個牌堆和索引區(qū)間為參數。哪個版本更容易出錯?你認為哪個版本會更高效?
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: