asked on
#include <iostream>
#include <stdexcept>
using namespace std;
template <typename T>
class node
{
private:
node( const T& x, node* p = NULL )
{
data = x;
next = p;
}
T data;
node* next;
template<typename S> friend class cQueue;
};
template <typename T>
class cQueue
{
public:
cQueue() // default constructor
{
last = NULL;
count = 0;
}
cQueue( const cQueue& q ) // copy constructor
{
copyQueue(q);
}
virtual ~cQueue() // queue destructor
{
deleteQueue();
}
cQueue& operator= ( const cQueue& q ) // overloaded assignment operator
{
if ( this != &q )
{
deleteQueue();
copyQueue( q );
}
return *this;
}
size_t size() const // return the size of the queue
{
return count;
}
void insert( const T& v ) // insert an value at the end of the queue
{
node<T>* last = tmp;
insert( tmp->data );
tmp = tmp->next;
}
T remove() // remove the front item from the queue
{
delete node<T>* front;
}
const T& front() const // return a reference to the front item
{
}
void print( ostream& os = cout ) const // print the contents of the list
{
}
private:
void deleteQueue() // delete nodes in "this" queue
{
if ( last != NULL )
{
node<T>* tmp = last->next;
while ( tmp != last )
{
node<T>* doomed = tmp;
tmp = tmp->next;
delete doomed;
}
last = NULL;
count = 0;
delete tmp;
}
}
void copyQueue( const cQueue& q ) // copy q queue into "this" queue ("this" queue must be empty)
{
last = NULL;
count = 0;
if ( q.last != NULL )
{
node<T>* tmp = q.last->next;
for ( size_t i = 0; i < q.count; i++ )
{
insert( tmp->data );
tmp = tmp->next;
}
}
count = q.count;
}
node<T>* last; // a pointer to the last node in the list
size_t count; // queue length
};
template <typename T> // overloaded ostream operator<<
ostream& operator<< ( ostream& os, const cQueue<T>& q )
{
q.print( os );
return os;
}
template <typename T>
void passByValue( cQueue<T> q )
{
q.insert( 40 );
cout << "queue inside passByValue: " << q << endl;
}
int main()
{
{
cQueue<int> q;
q.insert(10);
q.insert(20);
q.insert(30);
cout << "initial queue: " << q << endl;
passByValue( q );
cout << "queue after call to passByValue: " << q << endl;
cout << "front item: " << q.front() << endl;
q.remove();
cout << "front item removed: " << q << endl;
}
}
ASKER
T remove() // remove the front item from the queue
{
delete node<T>* front;
}
const T& front() const // return a reference to the front item
{
}
The following does not try to do functionally correct things. However, it does show you how to get your program to compile without errors: T remove() // remove the front item from the queue
{
delete /*node<T>**/ front();
return last->data;
}
const node<T>* front() const // return a reference to the front item
{
return last;
}
ASKER
ASKER
C++ is an intermediate-level general-purpose programming language, not to be confused with C or C#. It was developed as a set of extensions to the C programming language to improve type-safety and add support for automatic resource management, object-orientation, generic programming, and exception handling, among other features.
TRUSTED BY
It looks to me like the insert method is recursively calling itself. Probably not what you want to do....
Kent