如何在不使用默认构造函数的情况下减少以下代码的行数?不使用默认构造函数的矢量初始化
#include <vector>
enum Rank { DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE };
enum Suit { HEART, DIAMOND, CLUB, SPADE };
struct Card {
Card(Rank r, Suit s) : rank(r), suit(s) { }
Card(const Card& copy) : rank(copy.rank), suit(copy.suit) {}
Rank rank;
Suit suit;
};
const Card deckOfCards[52] = {
Card(ACE, HEART),
Card(DEUCE, HEART),
Card(THREE, HEART),
Card(FOUR, HEART),
Card(FIVE, HEART),
Card(SIX, HEART),
Card(SEVEN, HEART),
Card(EIGHT, HEART),
Card(NINE, HEART),
Card(TEN, HEART),
Card(JACK, HEART),
Card(QUEEN, HEART),
Card(KING, HEART),
Card(ACE, DIAMOND),
Card(DEUCE, DIAMOND),
Card(THREE, DIAMOND),
Card(FOUR, DIAMOND),
Card(FIVE, DIAMOND),
Card(SIX, DIAMOND),
Card(SEVEN, DIAMOND),
Card(EIGHT, DIAMOND),
Card(NINE, DIAMOND),
Card(TEN, DIAMOND),
Card(JACK, DIAMOND),
Card(QUEEN, DIAMOND),
Card(KING, DIAMOND),
Card(ACE, CLUB),
Card(DEUCE, CLUB),
Card(THREE, CLUB),
Card(FOUR, CLUB),
Card(FIVE, CLUB),
Card(SIX, CLUB),
Card(SEVEN, CLUB),
Card(EIGHT, CLUB),
Card(NINE, CLUB),
Card(TEN, CLUB),
Card(JACK, CLUB),
Card(QUEEN, CLUB),
Card(KING, CLUB),
Card(ACE, SPADE),
Card(DEUCE, SPADE),
Card(THREE, SPADE),
Card(FOUR, SPADE),
Card(FIVE, SPADE),
Card(SIX, SPADE),
Card(SEVEN, SPADE),
Card(EIGHT, SPADE),
Card(NINE, SPADE),
Card(TEN, SPADE),
Card(JACK, SPADE),
Card(QUEEN, SPADE),
Card(KING, SPADE)
};
class Deck {
public:
Deck() : cards(deckOfCards, deckOfCards + 52) {}
~Deck() {}
private:
std::vector<Card> cards;
};
请注意,您的副本构造函数与编译器隐式提供的副本构造函数完全相同。如果你确实写了一个拷贝构造函数,那么一定要写出拷贝赋值操作符和析构函数(当你需要这三个函数中的一个时,你通常都需要这三个函数)。 – 2011-05-16 01:40:00
减少行数?除了摆脱多余的复制构造函数(根据James的评论),您还可以删除代码中的所有换行符,从而以单行结束!或者更确切地说,有两行,因为'#include'需要一个单独的行。我认为你可以做到这一点。 – AnT 2011-05-16 01:51:29
@AndreyT:我注视着你的黑客,被黑了,是吗? – 2011-05-16 02:11:09