codecamp

C++ 纸牌的向量

本章选择纸牌作为研究对象的原因是,牌堆是一个很明显的纸牌向量的应用。 这是创建一副52张牌组成的新牌堆的代码:

apvector<Card> deck (52);

这是对象的状态图: enter image description here

三个点代表我不想画出的48张牌。记住,我们尚未初始化纸牌实例变量。有些环境中,它们会初始化为0,就像图中这样,而在其他环境中它们可能包含任何可能的值。

一种初始化方法是,以一个Card对象为第二个参数调用向量的构造函数:

Card aceOfSpades (3, 1);
apvector<Card> deck (52, aceOfSpades);

这段代码创建了一副由52张同样的牌组成的牌堆,就像变魔术用的特殊牌。当然,创建一副由52张不同的牌组成的牌堆才更有意义。这可以使用嵌套循环实现。

外层循环枚举了花色,从0到3。对于每种花色,内部循环枚举了牌的大小,从1到13。因为外部循环迭代4词,内部循环迭代13词,循环体总的执行次数是52次(即13乘以4)。

int i = 0;
for (int suit = 0; suit <= 3; suit++) {
  for (int rank = 1; rank <= 13; rank++) {
    deck[i].suit = suit;
    deck[i].rank = rank;
     i++;
  }
}

我们使用变量i记录牌堆中要使用的下一张牌。

注意,我们可以把数组元素选择语法([]操作符)和对象的实例变量选择语法(点操作符)组合起来。比如表达式deck[i].suit意思是“牌堆中第i张卡的花色”。

作为练习,请把构建牌堆的代码封装为buildDeck函数,该函数不接受任何参数并返回一个完全填充的纸牌向量。

C++ isGreater函数
C++ printDeck函数
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }