I implemented the stack via a linked list to practice manual memory work. I want to add initialization like in vector, I know about move and copy constructors, but it doesn't seem to make sense here.
What needs to be defined inside to write like this Stack<int> stack = { 1, 2, 3 };
?
template <typename T>
class Node {
public:
Node(T value_) {
value = value_;
}
Node<T>* next = nullptr;
int value;
};
template <typename T>
class Stack {
public:
Stack() {}
void push(T value) {
if (top == nullptr) {
top = new Node<T>(value);
} else {
auto new_node = new Node<T>(value);
new_node->next = top;
top = new_node;
}
}
T pop() {
if (top == nullptr) {
throw out_of_range("Stack is empty");
}
T result = top->value;
auto free_space = top;
top = top->next;
delete free_space;
return result;
}
private:
Node<T>* top = nullptr;
};