- 用模板函数实现stack
- #include <iostream>
- using namespace std;
- template<typename T>
- class Seqlist
- {
- private:
- T *_data;
- int _size;
- int _capacity;
- public:
- Seqlist()
- :_size(0), _capacity(3), _data(0)
- _data = new T[_capacity];
- }
- ~Seqlist()
- if (_data != NULL)
- delete[] _data;
- _data = NULL;
- void Checkcapacity()
- if (_size == _capacity)
- T *tmp = new T[2 * _capacity + 3];
- memcpy(tmp, _data, _size*sizeof(T));
- delete _data;
- _data = tmp;
- _capacity = 2 * _capacity + 3;
- Seqlist(const Seqlist&s)
- _data = new T[s._capacity];
- _size = s._size;
- _capacity = s._capacity;
- memcpy(_data, s._data, _capacity*sizeof(T));
- Seqlist &operator=(const Seqlist&s)
- if (this != &s)
- delete[]_data;
- return *this;
- void PushBack(const T&d)
- Checkcapacity();
- *(_data + _size) = d;
- _size++;
- void PopBack()
- _size--;
- void PushFront(const T&d)
- int i = 0;
- for (i = _size; i > 0; i--)
- *(_data + i) = *(_data + i - 1);
- *_data = d;
- void PopFront()
- for (i = 0; i < _size - 1; i++)
- *(_data + i) = *(_data + i + 1);
- void Insert(int pos, const T&d);
- void Sort()
- T tmp = 0;
- int j = 0;
- for (j = i + 1; j < _size; j++)
- if (*(_data + i) >*(_data + j))
- tmp = *(_data + i);
- *(_data + i) = *(_data + j);
- *(_data + j) = tmp;
- void print()
- for (i = 0; i < _size; i++)
- cout << *(_data + i) << " ";
- };
- void Seqlist<T>::Insert(int pos, const T&d)
- for (i = _size; i>pos; i--)
- *(_data + pos) = d;
- template <typename T,typename Container=Seqlist <T> >
- class Stack
- Container con;
- void Push(const T&d)
- con.PushBack(d);
- void Pop()
- con.PopBack();
- con.print();
- int main()
- Stack<int, Seqlist<int> >stack1;
- stack1.Push(1);
- stack1.Push(2);
- stack1.Push(3);
- stack1.Push(4);
- stack1.print();
- getchar();
- return 0;
- 2.运用stack
- #include <stack>
- stack<int>s;
- s.push(1);
- s.push(2);
- s.push(3);
- 3.模板的模板参数
- template<typename T,template<class> class Container=Seqlist >
- Container<T> con;
- Stack<int>s;
- s.Push(1);
- s.Push(2);
- s.Push(3);
- s.print();
- 4.非类型的类模板参数
- template <typename T,int MAX_SIZE=10>
- T data[MAX_SIZE];
- //public:
- // void show( int a)
- // {
- // cout << "show()" << endl;
- // }
- //template <typename T, int MAX_SIZE = 10>
- //void Seqlist<T, MAX_SIZE>::show(int a)
- //{
- // cout << "show()" << endl;
- //}
- Seqlist<int, 10>s1;
- Seqlist <int, 20>s2;
- 5.非类型的模板函数参数
- template <typename T,int val>
- T add(const T& x)
- return x + val;
- int ret = add<int, 3>(1);
- cout << ret << endl;