模板类和向量
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 - 错过了“耶略读!” - 所以你的解决方案更好。以上是关于模板类和向量的主要内容,如果未能解决你的问题,请参考以下文章