64,683
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <deque>
using namespace std;
template <class T>
class Stack
{
private:
deque<T> elems;
public:
Stack();
Stack(int n);
Stack(const Stack<T>&);
void push(const T&);
void pop();
T top()const;
bool isEmpty()const
{
return elems.empty();
}
template <class T2>
Stack<T>& operator= (const Stack<T2>&);
};
template <class T>
Stack<T>::Stack()
{
;
}
template <class T>
Stack<T>::Stack(int n)
{
elems = *(new deque<T>(n,0));
}
template <class T>
Stack<T>:: Stack(const Stack<T>& another)
{
this->elems = *new deque<T>(another);
}
template <class T>
void Stack<T>::push(const T& arg)
{
elems.push_front(arg);
}
template <class T>
void Stack<T>::pop()
{
elems.pop_front();
}
template <class T>
T Stack<T>::top()const
{
return elems.front();
}
template <class T>
template <class T2>
Stack<T>& Stack<T>::operator=(const Stack<T2>& operand2)
{
if((void*)this == (void*)&operand2)
{
return *this;
}
Stack<T2> tmp(operand2);
elems.clear();
while(tmp.isEmpty() == false)
{
this->push(tmp.top());
tmp.pop();
}
return *this;
}
template <class T>
void fillStack(Stack<T>& s, T* begin,T* end )
{
for(T* p = begin; p != end; p++)
{
s.push(*p);
}
}
template <class T>
void print(const Stack<T>& s )
{
while(!s.isEmpty())
{
cout<<s.top()<<" ";
s.pop();
}
cout<<endl;
}
int main(int argc, char *argv[])
{
typedef int IntegerArray[];
typedef float FloatArray[];
IntegerArray a = {1,2,3,40};
FloatArray b = {11.1,22.3,33.24,44.15,50.25};
Stack<int> intStack;
Stack<float> floatStack;
int a_len = sizeof(a)/sizeof(int);
int b_len = sizeof(b)/sizeof(int);
fillStack<int>(intStack,a,a+a_len);
cout<<"Initial int stack:";
print<int>(intStack);
fillStack<float>(floatStack,b,b+b_len);
cout<<"Initial float stack:";
print<float>(floatStack);
intStack = floatStack;
cout<<"after assignment,int stack:", print<int>(intStack);
cout<<"after assignment,float stack:",print<float>(floatStack);
//print();
return 0;
}
#include <iostream>
#include <deque>
#include <algorithm>
#include <iterator>
using namespace std;
template <class T>
class Stack
{
private:
deque<T> elems;
public:
Stack();
Stack(int n);
Stack(const Stack<T>&);
void push(const T&);
void pop();
T top()const;
bool isEmpty()const
{
return elems.empty();
}
template <class T2>
Stack<T>& operator= (Stack<T2>&);
};
template <class T>
Stack<T>::Stack()
{
;
}
template <class T>
Stack<T>::Stack(int n)
{
elems = *(new deque<T>(n,0));
}
template <class T>
Stack<T>:: Stack(const Stack<T>& another)
{
//delete &elems;
this->elems = deque<T>(another.elems);
}
template <class T>
void Stack<T>::push(const T& arg)
{
elems.push_front(arg);
}
template <class T>
void Stack<T>::pop()
{
elems.pop_front();
}
template <class T>
T Stack<T>::top()const
{
return elems.front();
}
template <class T>
template <class T2>
Stack<T>& Stack<T>::operator=(Stack<T2>& operand2)
{
if((void*)this == (void*)&operand2)
{
return *this;
}
Stack<T2> tmp(operand2);
elems.clear();
while(tmp.isEmpty() == false)
{
this->push(tmp.top());
tmp.pop();
}
return *this;
}
template <class T>
void fillStack(Stack<T>& s, T* begin,T* end )
{
for(T* p = begin; p != end; p++)
{
s.push(*p);
}
}
template <class T>
void print(const Stack<T>& tmp )
{
Stack<T> s(tmp);
while(!s.isEmpty())
{
cout<<s.top()<<" ";
s.pop();
}
cout<<endl;
}
int main(int argc, char *argv[])
{
typedef int IntegerArray[];
typedef float FloatArray[];
IntegerArray a = {1,2,3,40};
FloatArray b = {11.1,22.3,33.24,44.15,50.25};
Stack<int> intStack;
Stack<float> floatStack;
int a_len = sizeof(a)/sizeof(int);
int b_len = sizeof(b)/sizeof(int);
fillStack<int>(intStack,a,a+a_len);
cout<<"Initial int stack:";
print<int>(intStack);
fillStack<float>(floatStack,b,b+b_len);
cout<<"Initial float stack:";
print<float>(floatStack);
intStack = floatStack;
// floatStack = intStack;
cout<<"after assignment,int stack:",print<int>(intStack);
cout<<"after assignment,float stack:",print<float>(floatStack);
//print();
return 0;
}