【发布时间】:2016-05-01 02:44:25
【问题描述】:
准备考试并通过了这个我无法自信回答的问题。 假设我们需要使用 STL deque 和 Adapter 设计来实现 Stack,以下哪种方法是正确的方法:(只能有一个答案)
1. template <typename T> class stack: public deque<T> {};
2. template <typename T> class stack {private: deque<T>* dptr; };
3. template <typename T> class stack {protected: deque<T>* dptr; };
4. template <typename T> class stack {private: deque<T> {};}
5. template <typename T> class stack: private deque<T> {};
6. template <typename T> class stack {protected: deque<T> d; };
任何解决方案的提示将不胜感激。谢谢。
【问题讨论】:
-
std::stack正是这样一个适配器。随意研究它的设计和实现——它的源代码包含在您的 C++ 安装中。作为记录,std::stack与 #6(受保护成员)一起使用,但我看不出其他方法明显错误的任何原因。 -
@IgorTandetnik 我知道这一点。但是,我没有被要求实施或使用它,我只是被问到如果我需要,哪些选项是正确的方法。我会尽快检查源代码。
-
@Flexo 方法 #6 对于
std::stack来说已经足够好了。怎么样让你觉得不可接受? -
上述问题的答案将取决于您的导师的个人喜好。我有自己的偏好,但我可以看到一个合理的论点创建了一个堆栈,该堆栈将一个双端队列与它们中的每一个一起调整为堆栈,并反对它们中的每一个。在您的课堂上,您可能与您的讲师/课堂上关于适配器设计(或一般抽象)的经验法则进行了交流,并且该问题的答案将取决于该信息。不,不一定有正确的答案:必须有一个正确的答案适合你的班级。
-
@Flexo "
std::stack没有受保护的内部成员" 也有。 en.cppreference.com/w/cpp/container/stack : "Container c底层容器(受保护的成员对象)"