have each of the two stacks to store a
reference to a std::deque.
initialize them to refer to the
same std::deque.
write a wrapper class to hold the two stacks.
template< typename T > struct dual_stack
{
struct first_stack
{
explicit first_stack( std::deque<T>& seq ) : sequence(seq) {}
// implement stack members
// push/pop => sequence.push/pop_front()
private : std::deque<T>& sequence ;
};
struct second_stack
{
explicit second_stack( std::deque<T>& seq ) : sequence(seq) {}
// implement stack members
// push/pop => sequence.push/pop_back()
private : std::deque<T>& sequence ;
};
dual_stack() : _first_stack(sequence), _second_stack(sequence) {}
first_stack& first() { return _first_stack ; }
second_stack& second() { return _second_stack ; }
// const versions of the above, other members.
private:
std::deque<T> sequence ;
first_stack _first_stack ;
second_stack _second_stack ;
};
Reputation Points: 1159
Solved Threads: 285
Posting Virtuoso
Offline 1,606 posts
since Dec 2006