天天看点

模板参数

  1. 用模板函数实现stack
  2. #include <iostream>
  3. using namespace std;
  4. template<typename T>
  5. class Seqlist
  6. {
  7. private:
  8. T *_data;
  9. int _size;
  10. int _capacity;
  11. public:
  12. Seqlist()
  13. :_size(0), _capacity(3), _data(0)
  14. _data = new T[_capacity];
  15. }
  16. ~Seqlist()
  17. if (_data != NULL)
  18. delete[] _data;
  19. _data = NULL;
  20. void Checkcapacity()
  21. if (_size == _capacity)
  22. T *tmp = new T[2 * _capacity + 3];
  23. memcpy(tmp, _data, _size*sizeof(T));
  24. delete _data;
  25. _data = tmp;
  26. _capacity = 2 * _capacity + 3;
  27. Seqlist(const Seqlist&s)
  28. _data = new T[s._capacity];
  29. _size = s._size;
  30. _capacity = s._capacity;
  31. memcpy(_data, s._data, _capacity*sizeof(T));
  32. Seqlist &operator=(const Seqlist&s)
  33. if (this != &s)
  34. delete[]_data;
  35. return *this;
  36. void PushBack(const T&d)
  37. Checkcapacity();
  38. *(_data + _size) = d;
  39. _size++;
  40. void  PopBack()
  41. _size--;
  42. void PushFront(const T&d)
  43. int i = 0;
  44. for (i = _size; i > 0; i--)
  45. *(_data + i) = *(_data + i - 1);
  46. *_data = d;
  47. void PopFront()
  48. for (i = 0; i < _size - 1; i++)
  49. *(_data + i) = *(_data + i + 1);
  50. void Insert(int pos, const T&d);
  51. void Sort()
  52. T tmp = 0;
  53. int j = 0;
  54. for (j = i + 1; j < _size; j++)
  55. if (*(_data + i) >*(_data + j))
  56. tmp = *(_data + i);
  57. *(_data + i) = *(_data + j);
  58. *(_data + j) = tmp;
  59. void print()
  60. for (i = 0; i < _size; i++)
  61. cout << *(_data + i) << " ";
  62. };
  63. void Seqlist<T>::Insert(int pos, const T&d)
  64. for (i = _size; i>pos; i--)
  65. *(_data + pos) = d;
  66. template <typename T,typename Container=Seqlist <T> >
  67. class Stack
  68. Container con;
  69. void Push(const T&d)
  70. con.PushBack(d);
  71. void Pop()
  72. con.PopBack();
  73. con.print();
  74. int main()
  75. Stack<int, Seqlist<int> >stack1;
  76. stack1.Push(1);
  77. stack1.Push(2);
  78. stack1.Push(3);
  79. stack1.Push(4);
  80. stack1.print();
  81. getchar();
  82. return 0;
  83. 2.运用stack
  84. #include <stack>
  85. stack<int>s;
  86. s.push(1);
  87. s.push(2);
  88. s.push(3);
  89. 3.模板的模板参数
  90. template<typename T,template<class> class Container=Seqlist >
  91. Container<T> con;
  92. Stack<int>s;
  93. s.Push(1);
  94. s.Push(2);
  95. s.Push(3);
  96. s.print();
  97. 4.非类型的类模板参数
  98. template <typename T,int MAX_SIZE=10>
  99. T data[MAX_SIZE];
  100. //public:
  101. // void show( int a)
  102. // {
  103. // cout << "show()" << endl;
  104. // }
  105. //template <typename T, int MAX_SIZE = 10>
  106. //void Seqlist<T, MAX_SIZE>::show(int a)
  107. //{
  108. // cout << "show()" << endl;
  109. //}
  110. Seqlist<int, 10>s1;
  111. Seqlist <int, 20>s2;
  112. 5.非类型的模板函数参数
  113. template <typename T,int val>
  114.  T add(const T& x)
  115. return x + val;
  116.   int ret = add<int, 3>(1);
  117. cout << ret << endl;

继续阅读