Mega Code Archive

 
Categories / C++ Tutorial / Vector
 

Accessing the Back of a Vector

#include <iostream> #include <list> #include <vector> using namespace std; template <class ForwIter> void print(ForwIter first, ForwIter last, const char* title) {    cout << title << endl;    while ( first != last)       cout << *first++ << '\t';    cout << endl; } class Card {    public:    enum Suit { spades, clubs, hearts, diamonds };    Card( int value = 1, Suit suit = spades );    // value - 1 = Ace, 2-10, 11 = Jack, 12 = Queen, 13 = King    int suit() const;    int value() const;    private:    int value_;    Suit suit_; }; inline Card::Card( int value, Suit suit )    : value_( value ), suit_( suit ) {} // empty inline int Card::suit() const { return suit_; } inline int Card::value() const { return value_; } // global function ostream& operator<<( ostream& out, const Card& card ) {    if( card.value() >= 2 && card.value() <= 10 )       out << card.value();    else       switch( card.value() )       {          case  1: out << "Ace"; break;          case 11: out << "Jack"; break;          case 12: out << "Queen"; break;          case 13: out << "King"; break;          default: out << "Unknown value"; break;       };    out << " of ";    switch( card.suit() )    {       case Card::spades:   out << "spades"; break;       case Card::clubs:    out << "clubs"; break;       case Card::diamonds: out << "diamonds"; break;       case Card::hearts:   out << "hearts"; break;       default:             out << "unknown suit"; break;    }    return out; } int main( ) {    const int num_players = 2;    vector< list<Card> > hands( num_players );    // deal first player a hand    hands[0].push_front( Card( 12, Card::hearts ) );    hands[0].push_front( Card( 1,  Card::spades ) );    hands[0].push_front( Card( 4,  Card::spades ) );    // deal second player a hand    hands[1].push_front( Card( 13, Card::diamonds ) );    hands[1].push_front( Card( 12, Card::clubs ) );    hands[1].push_front( Card( 2,  Card::hearts ) );    const int num_plays = 3;    bool discard[num_players][num_plays] = { { true, true, false },                                             { true, false, false } };    vector<Card> discard_pile;    // simulate card play    for( int i = 0; i < num_plays; ++i )       for( int j = 0; j < num_players; ++j )          // if discard and hand not empty...          if( discard[j][i] && !hands[j].empty() )          {             discard_pile.push_back( hands[j].front() );             hands[j].pop_front();             cout << "Player " << (j+1) << " discarded a "                << discard_pile.back() << endl;          }// if pick up and discard pile not empty...          else if( !discard[j][i] && !discard_pile.empty() )          {             hands[j].push_back( discard_pile.back() );             cout << "Player " << (j+1) << " picked up a "                << discard_pile.back() << endl;             discard_pile.pop_back();          } }