How to implement generic stack template class with dynamic allocation in C++

2 Answers

0 votes
#include <iostream>

using std::cout;
using std::endl;

#define SIZE 10

template <class T> class stack {
private:
	T *parr;
	int index;
public:
	stack(void);
	~stack(void);
	void push(T i);
	void pop(void);
	void print(void);
};

template <class T> stack<T>::stack()
{
	index = 0;
	cout << "Stack Constructor" << endl;
	parr = new T[SIZE];
}

template <class T> stack<T>::~stack()
{
	cout << "Stack Destructor" << endl;
	delete[] parr;
}

template <class T> void stack<T>::push(T value)
{
	if (index == SIZE)
	{
		cout << "Stack is full" << endl;
		return;
	}
	parr[index++] = value;
}
template <class T> void stack<T>::pop(void)
{
	if (index == 0)
	{
		cout << "Stack is empty" << endl;
		return;
	}
	
	parr[--index];
}
template <class T> void stack<T>::print(void)
{
	for (int i = 0; i < index; i++)
		cout << parr[i] << ' ';

	cout << endl;
}

int main()
{
	stack<int> iobj;

	iobj.push(1);
	iobj.push(2);
	iobj.push(3);
	iobj.print();
	iobj.pop();
	iobj.pop();
	iobj.print();

	stack<double> dobj;

	dobj.push(3.14);
	dobj.push(17.81);
	dobj.print();
	dobj.pop();
	dobj.print();

	stack<char> cobj;

	for (int i = 0; i < 4; i++)
		cobj.push((char) 'A' + i);
	cobj.print();
	cobj.pop();
	cobj.pop();
	cobj.print();

	return 0;
}

/*
run:

Stack Constructor
1 2 3
1
Stack Constructor
3.14 17.81
3.14
Stack Constructor
A B C D
A B
Stack Destructor
Stack Destructor
Stack Destructor

*/

 



answered Mar 15, 2018 by avibootz
0 votes
#include <iostream>

using std::cout;
using std::endl;

template <class T> class stack {
private:
	T *parr;
	int index;
	int size;
public:
	stack(int _size);
	~stack(void);
	void push(T i);
	void pop(void);
	void print(void);
};

template <class T> stack<T>::stack(int _size)
{
	index = 0;
	cout << "Stack Constructor" << endl;
	size = _size;
	parr = new T[size];
}

template <class T> stack<T>::~stack()
{
	cout << "Stack Destructor" << endl;
	delete[] parr;
}

template <class T> void stack<T>::push(T value)
{
	if (index == size)
	{
		cout << "Stack is full" << endl;
		return;
	}
	parr[index++] = value;
}
template <class T> void stack<T>::pop(void)
{
	if (index == 0)
	{
		cout << "Stack is empty" << endl;
		return;
	}
	
	parr[--index];
}
template <class T> void stack<T>::print(void)
{
	for (int i = 0; i < index; i++)
		cout << parr[i] << ' ';

	cout << endl;
}

int main()
{
	stack<int> iobj(4);

	iobj.push(1);
	iobj.push(2);
	iobj.push(3);
	iobj.print();
	iobj.pop();
	iobj.pop();
	iobj.print();

	stack<double> dobj(5);

	dobj.push(3.14);
	dobj.push(17.81);
	dobj.print();
	dobj.pop();
	dobj.print();

	stack<char> cobj(6);

	for (int i = 0; i < 5; i++)
		cobj.push((char) 'A' + i);
	cobj.print();
	cobj.pop();
	cobj.pop();
	cobj.print();

	return 0;
}

/*
run:

Stack Constructor
1 2 3
1
Stack Constructor
3.14 17.81
3.14
Stack Constructor
A B C D E
A B C
Stack Destructor
Stack Destructor
Stack Destructor

*/

 



answered Mar 15, 2018 by avibootz

Related questions

1 answer 248 views
2 answers 257 views
1 answer 225 views
1 answer 231 views
1 answer 213 views
1 answer 181 views
...