fork download
  1. #include <iostream>
  2. #include <memory>
  3.  
  4. using namespace std;
  5.  
  6. template <typename T>
  7. class StackNode{
  8. public:
  9. T data_{};
  10. std::unique_ptr<StackNode<T>> next_;
  11.  
  12. explicit StackNode(const T& data_) : data_(data_),next_(nullptr) {}
  13.  
  14. };
  15. template <typename T>
  16. class Stack{
  17. private:
  18.  
  19. std::unique_ptr<StackNode<T>> top_;
  20. std::size_t size_{};
  21.  
  22. public:
  23. Stack() : top_(nullptr), size_ (0){}
  24. void push(const T& item){
  25. std::unique_ptr<StackNode<T>> p = std::make_unique<StackNode<T>>(item);
  26. p->next_ = std::move(top_);
  27. top_ = std::move(p);
  28. }
  29.  
  30. T pop(){
  31. T p = top_->data_;
  32. top_ = std::move(top_->next_);
  33. return p;
  34. }
  35.  
  36. T peek(){
  37. return top_->data_;
  38. }
  39.  
  40. };
  41.  
  42. int main() {
  43.  
  44. Stack<int> stack{};
  45. stack.push(12);
  46. stack.push(13);
  47. std::cout << stack.peek() << std::endl;
  48. stack.pop();
  49. std::cout << stack.peek() << std::endl;
  50.  
  51. return 0;
  52. }
Success #stdin #stdout 0s 4456KB
stdin
Standard input is empty
stdout
13
12