#pragma once
#include <list>
#include <iostream>
using namespace std;
template <class _Ty>
class MyDeque
{
public:
MyDeque() {}
void push_back(_Ty data) { mem.push_back(data); }
void push_front(_Ty data) { mem.push_front(data); }
void pop_front() { mem.pop_front(); }
void pop_back() { mem.pop_back(); }
int size() { return mem.size(); }
bool empty() { return mem.empty(); }
_Ty front() { return mem.front(); }
_Ty back() { return mem.back(); }
protected:
list<_Ty> mem;
};
#include <deque>
#include <iostream>
#include <string>
#include "myDeque.h"
using namespace std;
void testDeque()
{
deque<int> data;
data.push_back(1);
data.push_front(2);
data.push_back(3);
cout << data.size() << endl;
while (!data.empty())
{
cout << data.front() << "\t";
data.pop_front();
}
cout << endl;
deque<string> strQue;
strQue.push_front("love");
strQue.push_front("Andsen");
strQue.push_back("Young");
while (!strQue.empty())
{
cout << strQue.back() << "\t";
strQue.pop_back();
}
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()
{
deque<MM> mmQue;
mmQue.push_back(MM("小可爱", 18));
mmQue.push_front(MM("小甜心", 20));
cout << mmQue.size() << endl;
while (!mmQue.empty())
{
cout << mmQue.front();
mmQue.pop_front();
}
}
void testMyDeQue()
{
MyDeque<MM> mmQue;
mmQue.push_back(MM("小可爱", 18));
mmQue.push_front(MM("小甜心", 20));
cout << mmQue.size() << endl;
while (!mmQue.empty())
{
cout << mmQue.front();
mmQue.pop_front();
}
}
int main()
{
testDeque();
testUserData();
testMyDeQue();
return 0;
}