模板类和向量

Posted

技术标签:

【中文标题】模板类和向量【英文标题】:template class & vector 【发布时间】:2010-08-14 23:42:47 【问题描述】:

实现一个名为 MyStack 的模板类,它使用 STL 类向量创建一个堆栈。 MyStack 类将有两个函数——push() 和 pop()。由于 MyStack 是一个模板类,它必须以可用于创建任何类型数据(内置和自定义类型)的堆栈的方式编写。当堆栈的一个元素被弹出时,它应该从向量中删除,以便弹出的数据不再使用内存。 在 main() 中,创建多个不同数据类型的此类堆栈,推送一些示例数据,并在数据从相应堆栈中弹出时显示这些数据。

【问题讨论】:

到目前为止您尝试了哪些方法,是否特别卡在某个地方? *** 不是家庭作业完成服务。 【参考方案1】:

std::vector 缩小的唯一方法是使用更小的向量来缩小swap。因此,在弹出每个对象时释放其内存需要为每个pop 复制(几乎)整个向量,使其成为O(n) 操作。

所以,我建议你不要那样做,或者如果这是家庭作业,要么清楚地说明为什么实现如此糟糕,要么注意vector::pop_back 实际上并没有释放任何东西。

顺便说一下,<stack> 中的 std::stack 实现了 O(1) push()pop() 使用 std::vector 来处理分配。

【讨论】:

【参考方案2】:

不会直接给你答案。但是您要做的是创建一个包含 TYPE 指针的类。当指针指向的数组被填满时,将信息复制到一个新的更大的数组中,然后删除旧数组。跟踪容量和当前大小。

如果你不能自己编程,那么你真的需要回去学习更多关于这门语言的知识。

【讨论】:

这将重新实现std::vector。他特别说他正在建立std::vector @Potatoswatter - 错过了“耶略读!” - 所以你的解决方案更好。

以上是关于模板类和向量的主要内容,如果未能解决你的问题,请参考以下文章

指定一些模板参数

cpp►标准模板库STL

开心档之C++ STL 教程

C++模板类和类模板

如何编写一个接受每个类和类模板的 C++ 模板?

具有本机 UML 类型的模板类和模板类的 OCL 约束