码迷,mamicode.com
首页 > 其他好文 > 详细

第三十五课 栈的概念及实现(下)

时间:2018-09-16 21:08:03      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:tac   src   temp   cout   links   def   cst   iostream   构造函数   

技术分享图片

 

自定义Test类,给出如下的测试程序:

 1 #include <iostream>
 2 #include "StaticStack.h"
 3 
 4 using namespace std;
 5 using namespace DTLib;
 6 
 7 class Test : public Object
 8 {
 9 public:
10     Test()
11     {
12         cout << "Test()" << endl;
13     }
14 
15     ~Test()
16     {
17         cout << "~Test()" << endl;
18     }
19 };
20 
21 int main()
22 {
23     StaticStack<Test, 10> stack;
24 
25     cout << stack.size() << endl;
26 
27     return 0;
28 }

运行结果如下:

技术分享图片

 

 此时栈中没有任何元素,却调用了10次构造函数和10次析构函数。

这是因为我们使用了原生数组作为存储空间,在创建栈的时候,当然会调用泛指类型T的构造函数。

我们需要另一种存储形式,来避免这种缺陷。

 

技术分享图片

技术分享图片

技术分享图片

 

 添加LinkStack.h文件:

 1 #ifndef LINKSTACK_H
 2 #define LINKSTACK_H
 3 
 4 #include "Stack.h"
 5 #include "LinkList.h"
 6 
 7 
 8 namespace DTLib
 9 {
10 
11 template < typename T >
12 class LinkStack : public Stack<T>
13 {
14 protected:
15     LinkList<T> m_list;
16 public:
17     void push(const T& e)
18     {
19         m_list.insert(0, e);
20     }
21 
22     void pop()
23     {
24         if( m_list.length() > 0 )
25         {
26             m_list.remove(0);
27         }
28         else
29         {
30             THROW_EXCEPTION(InvalidOperationException, "No element in current stack...");
31         }
32     }
33 
34     T top() const
35     {
36         if( m_list.length() > 0 )
37         {
38             return m_list.get(0);
39         }
40         else
41         {
42             THROW_EXCEPTION(InvalidOperationException, "No element in current stack...");
43         }
44     }
45 
46     void clear()
47     {
48         m_list.clear();
49     }
50 
51     int size() const
52     {
53         return m_list.length();
54     }
55 
56 };
57 
58 }
59 
60 #endif // LINKSTACK_H

测试程序如下:

 1 #include <iostream>
 2 #include "LinkStack.h"
 3 
 4 using namespace std;
 5 using namespace DTLib;
 6 
 7 class Test : public Object
 8 {
 9 public:
10     Test()
11     {
12         cout << "Test()" << endl;
13     }
14 
15     ~Test()
16     {
17         cout << "~Test()" << endl;
18     }
19 };
20 
21 int main()
22 {
23     LinkStack<Test> stack;
24 
25     cout << stack.size() << endl;
26 
27     return 0;
28 }

 

结果如下:

技术分享图片

没有再调用构造函数。

 

第三十五课 栈的概念及实现(下)

标签:tac   src   temp   cout   links   def   cst   iostream   构造函数   

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9657085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!