A class template does not actually generate any code, so all the functions will be written directly in the header (.h) file (which turns out to be necessary to properly instantiate an actual list in the code). To instantiate a list, the following is used:
List<int> int_stack;
List<some_struct> some_struct_stack;
To create a pointer to element within the list, the following is used:
List<int>::Element *int_element;
List<some_struct>::Element *some_element;
Note that the struct Element is defined as public to allow this (though the master element pointer is private). The functions implemented initially are:
List() – constructor; allocates master element and initializes it
~List() – destructor; deallocates any elements in list and master element
bool empty() – checks if list is currently empty
Element *top() – get a pointer to element on top of stack.
push(T value) – pushes value (by value) on stack
T pop() - pops value from top of stack (must not be empty)
push(T *value) – pushes value (by pointer) on stack
bool pop(T *value) – pops value (by pointer) from top of stack (if not empty)
first(Element *&element) – sets pointer to first element
next(Element *&element) – sets pointer to next element
bool not_end(Element *&element) – check if not end
There are two sets of push and pop functions. One set works with actual values and is more appropriate for lists of simple types (int, doubles, enums, etc.). The other set works with pointers to the actual values, which is better for lists of structures, but can be used for simple types also. I implemented the by value push and pop so that constants could be pushed directly without having to define a variable and set it to the value to push. I foresee this may be necessary for some of the stacks. Note that the pop value by value function does not return any status of the list being empty, and therefore the list must not be empty before using this function. I also added the three functions for use with for statements. Any additional functions will be added to the list class template as needed.
Monday, December 28, 2009
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment
All comments and feedback welcomed, whether positive or negative.
(Anonymous comments are allowed, but comments with URL links or unrelated comments will be removed.)