</pre><pre name="code" class="cpp">#include <iostream>
#include <string>
template <class Type>
class Stack {
private:
Type * items; // holds stack items
int top; // index for top stack item
public:
Stack();
Stack(Type, int);
~Stack();
Stack<Type> & operator=(Stack<Type> & st);
void operator++();
void operator--();
void push(const Type & item); // add item to stack
bool isempty();
void showAll();
};
template <class Type>
Stack<Type>::Stack() : items(0), top(0) {}
template <class Type>
Stack<Type>::Stack(Type T, int n) : top(n) {
items = new Type[n];
for (int i = 0; i < n; ++i) {
items[i] = T;
}
}
template <class Type>
Stack<Type>::~Stack() {
delete[] items;
}
template <class Type>
Stack<Type> & Stack<Type>::operator=(Stack<Type> & st) {
top = st.top;
delete[] items;
items = new Type[top];
for (int i = 0; i < top; ++i)
items[i] = st.items[i];
return *this;
}
template <class Type>
void Stack<Type>::operator++() {
Stack<Type> t;
t = *this;
++top;
delete[] items;
items = new Type[top];
for (int i = 0; i < (top - 1); ++i)
items[i] = t.items[i];
items[top - 1] = 0;
}
template <class Type>
void Stack<Type>::operator--() {
Stack<Type> t;
t = *this;
--top;
delete[] items;
items = new Type[top];
for (int i = 0; i < (top - 1); ++i)
items[i] = t.items[i];
}
template <class Type>
void Stack<Type>::push(const Type & item) {
++*this;
items[top - 1] = item;
}
template <class Type>
bool Stack<Type>::isempty() {
return top == 0;
}
template<class Type>
void Stack<Type>::showAll() {
for (int i = 0; i < top; ++i) {
std::cout << items[i] << " ";
if ((i + 1) % 4 == 0)
std::cout << std::endl;
}
}
int main() {
Stack<std::string> ty("hello world! ", 10);
ty.showAll();
ty.push("Thank you.");
return 0;
}
一个简单的模板数组
最新推荐文章于 2023-05-14 20:23:07 发布