Alright, this is not an attempt to compete with the contests that Prelude does a great job running, rather it complements those contests. The point of Prelude's contests is to compete with one another, this is a thread dedicated to cooperation and collaboration. It's on the C++ board as this will be a C++ only challenge.

Ground rules are simple, anyone can participate, but try not to duplicate effort -- please read other people's replies. As the whole point is to have participation of as many people as are interested, I also ask that people not give too many answers all at once -- give a few, and let others have a chance before you give more. Contributions should be posted to this thread. Feel free to discuss and critique solutions, but as always, keep criticism constructive.

Dunno how much interest people have in this kind of thing, but I think guided projects are a great learning tool (I did one last semester with a class I taught, and they liked it a lot). Hopefully people will think this is a worthwhile pursuit.

The focus of this project is to develop and use good programming techniques.

All that being said, the problem statement and the first design step are below. Once I think this step has been completed successfully, the next gets posted:

Problem Statement
-----------------------------------------------------------
A queue is a data structure which is similar to the line at your local grocery. Data enters the queue at the tail (the "back of the line") and leaves at the head. Once the head leaves the line, the person who was next becomes the new head of the line.

In this project, we will implement and test a Queue class. The data will be of arbitrary type, T, so we will use templates. This Queue class will also allow us to optionally specify a maximum capacity of the Queue, after which no new data may be queued at the tail until data is removed from the head.

Step #1 - Interface
-----------------------------------------------------------
The interface is the collection of methods exposed as public or protected, as well as friend or other helper functions (which are counted as part of the public interface).

List methods that we will need or want to include in our Queue class. Don't worry about how we will implement them, just give their signatures and a brief description (one to four lines describing what the function does). Also include relevant information about the method. For example, we will have a default constructor:

Queue();
// Creates an empty Queue object that has no capacity specified.
// Access : public member
// Parameters: None
// Returns: N/A

At this point, we're not even thinking about private data members or private methods, just the public and protected interfaces.