MyStack.hpp
#pragma once
//����ͨ��vectorʵ��stack
#include <vector>
#include <iostream>
using namespace std;
template <class _Ty>
class MyStack
{
public:
MyStack() {}
void push(_Ty data) { mem.push_back(data); }
_Ty top() { return mem[mem.size() - 1];}
void pop() { mem.pop_back(); }
int size() { return mem.size(); }
int empty() { return mem.empty();}
protected:
vector<_Ty> mem;
};
#include <stack>
#include <iostream>
#include "MyStack.hpp"
using namespace std;
/*
1.基本操作
push();
pop();
top();
size();
empty();
*/
void testStack()
{
stack<int> intStack;
for (int i = 0; i < 3; i++)
{
intStack.push(i);
}
cout << "size:" << intStack.size() << endl;
while (!intStack.empty())
{
cout << intStack.top() << "\t";
intStack.pop();
}
cout << endl;
}
class MM
{
public:
MM(string name,int age):name(name),age(age){}
friend ostream& operator<<(ostream& out, const MM& object);
protected:
string name;
int age;
};
ostream& operator<<(ostream& out, const MM& object)
{
out << object.name << "\t" << object.age << endl;
return out;
}
void testUserData()
{
stack<MM> mmStack;
MM mm[3] = { {"string1",15},
{"string2",17},
{"string0",29} };
for (int i = 0; i < 3; i++)
{
mmStack.push(mm[i]);
}
while (!mmStack.empty())
{
cout << mmStack.top();
mmStack.pop();
}
}
void testMyStack()
{
MyStack<MM> mmStack;
MM mm[3] = { {"string1",15},
{"string2",17},
{"string0",29} };
for (int i = 0; i < 3; i++)
{
mmStack.push(mm[i]);
}
while (!mmStack.empty())
{
cout << mmStack.top();
mmStack.pop();
}
}
int main()
{
testStack();
testUserData();
cout << "------------------" << endl;
testMyStack();
return 0;
}