摘要:本文主要向大家介绍了C++语言模拟实现栈 类模板,通过具体的代码向大家展示,希望对大家学习C++语言有所帮助。
本文主要向大家介绍了C++语言模拟实现栈 类模板,通过具体的代码向大家展示,希望对大家学习C++语言有所帮助。
// 坏境 win7 x64 vs2012
[cpp] view plain copy print? 1. #include <iostream> 2. #include <cassert> 3. using namespace std; 4. 5. template <typename T> 6. class Stack 7. { 8. public: 9. // 构造函数 10. explicit Stack(const size_t capacity = 10) 11. :_size(0) 12. ,_capacity(10) 13. { 14. // 最小分配10个 大于10 则分配用户指定的大小 15. _capacity = (_capacity > capacity)? _capacity : capacity; 16. _array = new T[_capacity]; 17. } 18. 19. // 拷贝构造函数 20. explicit Stack(const Stack<T>& s) 21. { 22. _array = new T[s._capacity]; 23. _capacity = s._capacity; 24. _size = s._size; 25. for (size_t idx = 0; idx < _size; ++idx) 26. { 27. _array[idx] = s._array[idx]; 28. } 29. } 30. 31. // 赋值重载 简洁版本 32. Stack& operator=(const Stack<T>& s) 33. { 34. if (this != &s) 35. { 36. Stack temp(s); 37. std::swap(_array, temp._array); 38. _size = s._size; 39. _capacity = s._capacity; 40. } 41. return *this; 42. } 43. 44. // 获取当前栈顶 45. T& Top()const 46. { 47. assert(!Empty()); // 断言 48. return _array[_size -1]; 49. } 50. 51. // 获取栈当前元素 52. size_t Length()const 53. { 54. return _size; 55. } 56. private: 57. // 检查容量是否满 满则扩充双倍 58. void CheckCapacity() 59. { 60. if (_size>=_capacity) 61. { 62. T* temp = new T[_capacity*2]; // 分配新的空间 63. for (int idx = 0; idx < _size; ++idx) // 拷贝原来的元素到心空间 64. { 65. temp[idx] = _array[idx]; 66. } 67. _array = temp; 68. _capacity *= 2; 69. } 70. } 71. public: 72. // 压栈 73. void Push(const T& data) 74. { 75. // 插入数据时 检查是否已满 76. CheckCapacity(); 77. _array[_size++] = data; 78. } 79. 80. // 判空 81. bool Empty()const 82. { 83. return 0 == _size; 84. } 85. 86. // 出栈 并将出栈的元素赋给data 87. bool Pop(T& data) 88. { 89. if (Empty()) 90. { 91. return false; 92. } 93. else 94. { 95. data = _array[--_size]; 96. return true; 97. } 98. } 99. 100. // 析构函数 101. ~Stack() 102. { 103. if (NULL != _array) 104. { 105. delete[] _array; 106. _array = NULL; 107. _capacity = 0; 108. _size = 0; 109. } 110. } 111. 112. private: 113. T* _array; // 指向栈底 114. size_t _size; // 表示栈中元素个数 115. size_t _capacity; // 栈的容量 116. }; 117. 118. // 测试基本功能 119. void Test() 120. { 121. // 测试push 122. // Stack<int> stack_test_push; 123. // stack_test_push.Push(1); 124. // stack_test_push.Push(2); 125. // stack_test_push.Push(3); 126. // stack_test_push.Push(4); 127. 128. // // 测试拷贝构造 和 重载赋值运算符 129. // Stack<int> stack_test_copy; 130. // stack_test_copy = stack_test_push; 131. // Stack<int> stack_test_copying; 132. // stack_test_copying = stack_test_push; 133. // 134. // int temp; // 接收 pop出来的值 135. // stack_test_copy.Pop(temp); 136. // stack_test_copy.Pop(temp); 137. // stack_test_copy.Pop(temp); 138. // stack_test_copy.Pop(temp); 139. // stack_test_copy.Pop(temp); 140. 141. // 测试 空栈是否断言成功 142. // Stack<int> s1; 143. // int get_top; 144. // get_top = s1.Top(); 145. 146. Stack<int> s2; 147. cout << "s2的大小:" << s2.Length() << endl; 148. } 149. 150. int main() 151. { 152. Test(); 153. return 0; 154. }
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号