Summary Files Commits Branches @commit @diff @stats
path: root / Year 2 / Structures and data algorithms / HomeworkExamPrep / Stack / Stack_DynamicSeq.hpp
blob: 7f794e7baa824c19515b9275ce52b8d4b9eb9295 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef STACK_DYNAMIC
#define STACK_DYNAMIC

template <class T>
class Stack {
	T* vals;
	unsigned topInd;
	unsigned size;

	void resize();

public:
	Stack();
	~Stack();
	Stack(Stack& other) = delete;
	Stack& operator=(const Stack& other) = delete;

	void push(const T& v);
	void pop();
	T& top();
};

template <class T>
void Stack<T>::resize() {
	unsigned newSize = size << 1;
	T* newVals = new T[newSize];
	for (unsigned i = 0; i < size; i++)
		newVals[i] = vals[i];
	delete vals;
	vals = newVals;
	size = newSize;
}

template <class T>
Stack<T>::Stack() {
	vals = new T[1]; // for testing purposes its 1
}

template <class T>
Stack<T>::~Stack() {
	delete[] vals;
}

template <class T>
void Stack<T>::push(const T& v) {
	if (topInd == size)
		resize();

	vals[topInd++] = v;
}

template <class T>
void Stack<T>::pop() {
	topInd--;
}

template <class T>
T& Stack<T>::top() {
	return vals[topInd - 1];
}

#endif