The following example is a complete program that creates a deck of cards and shuffles it. The purpose of the example is to show how the Essential Tools Module template collections can be used in conjunction with the C++ Standard Library. See your C++ Standard Library documentation for more information on the features used in the example.
/* Note: This example requires the C++ Standard Library */ #include <iostream> #include <algorithm> #include <rw/tvordvec.h> struct Card { char rank_; char suit_; Card (char r, char s) : rank_ (r), suit_ (s) { } Card (const Card& ref) : rank_ (ref.rank_), suit_ (ref.suit_) { } bool operator== (const Card& ref) const { return rank_ == ref.rank_ && suit_ == ref.suit_; } bool operator< (const Card& ref) const { return rank_ < ref.rank_; } // print a card: '3-H' = three of hearts, 'A-S' = ace of spades friend std::ostream& operator<< (std::ostream& s, const Card& ref) { s << ref.rank_ << "-" << ref.suit_; return s; } }; struct Deck { private: int rank_index_; // indexes into static arrays below int suit_index_; static const char ranks_ [13]; static const char suits_ [4]; public: Deck () : rank_index_ (-1), suit_index_ (-1) { } // generate the next Card Card operator()() { rank_index_ = (rank_index_ + 1) % 13; if (rank_index_ == 0) // cycled through ranks, move on to next suit: suit_index_ = (suit_index_ + 1) % 4; return Card(ranks_[rank_index_], suits_[suit_index_]); } }; /* static */ const char Deck::suits_[4] = { 'S', 'H', 'D', 'C' }; /* static */ const char Deck::ranks_[13] = { 'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K' }; int main () { // Essential Tools Module collection: RWTValOrderedVector<Card> deck; RWTValOrderedVector<Card>::size_type pos; Card aceOfSpades('A','S'); // Use standard library algorithm to generate deck: generate_n(back_inserter(deck.std()), 52, Deck()); std::cout << std::endl << "The deck has been created" << std::endl; // Use Essential Tools Module member function to find card: pos = deck.index(aceOfSpades); std::cout << "The Ace of Spades is at position " << pos+1 << std::endl; // Use standard library algorithm to shuffle deck: std::random_shuffle(deck.begin(), deck.end()); std::cout << std::endl << "The deck has been shuffled" << std::endl; // Use Essential Tools Module member functions: pos = deck.index(aceOfSpades); Card firstCard = deck.first(); std::cout << "Now the Ace of Spades is at position " << pos+1 << std::endl << "and the first card is " << firstCard << std::endl; return 0; } |
Output (will vary because of the shuffle):
The deck has been created The Ace of Spades is at position 1 The deck has been shuffled Now the Ace of Spades is at position 37 and the first card is Q-D |
Copyright © Rogue Wave Software, Inc. All Rights Reserved.
The Rogue Wave name and logo, and SourcePro, are registered trademarks of Rogue Wave Software. All other trademarks are the property of their respective owners.
Provide feedback to Rogue Wave about its documentation.