有段时间没更新了 最近想把STL的容器都实现一遍来提升自己写轮子的能力
MyStack.h
#pragma once
#ifndef MYSTACK
#define MYSTACK
#include <iostream>
#include <string>
typedef unsigned int uint;
template<class T>
class MyStack {
T* ptr;
uint capacity;
uint len;
public:
MyStack();
~MyStack();
void push(T const& data);
void pop();
bool isEmpty()const;
T getTop()const;
};
template<class T>
MyStack<T>::MyStack() {
ptr = nullptr;
capacity = 0;
len = 0;
}
template<class T>
MyStack<T>::~MyStack() {
if (ptr)
delete[] ptr;
ptr = nullptr;
capacity = 0;
len = 0;
}
template<class T>
void MyStack<T>::push(T const& data) {
if (len >= capacity) {
capacity = capacity + 1;
T* temp = new T[capacity];
if (!temp)
return;
for (int i = 0; i < len; i++)
temp[i] = ptr[i];
delete[] ptr;
ptr = temp;
}
ptr[len++] = data;
}
template<class T>
void MyStack<T>::pop() {
if (len > 0)
len--;
}
template<class T>
bool MyStack<T>::isEmpty()const {
if (len == 0)
return true;
else
return false;
}
template<class T>
T MyStack<T>::getTop()const {
return ptr[len - 1];
}
#endif // !MyStack
main.cpp
#include "MyStack.h"
#include <iostream>
#include <stack>
using namespace std;
int main() {
MyStack<string>mystack;
mystack.push("hello");
mystack.push("world");
while (!mystack.isEmpty()) {
cout << mystack.getTop();
mystack.pop();
}
while (true);
return 0;
}