首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符堆栈、字符串堆栈、整数堆栈、整数数组堆栈等

字符堆栈、字符串堆栈、整数堆栈、整数数组堆栈等
EN

Stack Overflow用户
提问于 2009-12-27 03:08:04
回答 4查看 410关注 0票数 1

我想使用c++模板创建一个泛型堆栈。栈的push方法的原型由Void push( t* ptr)给出,其中t是模板参数。现在指针ptr可能指向一个整数或整数数组,它可能指向单个字符或字符数组,它可能指向单个双精度数或双精度数组等等。我想要的是,我想要在push方法中分配内存如果ptr指向一个整数,那么我需要根据整数的大小分配内存,如果ptr指向整数数组,那么我需要根据数组的大小分配内存。类似地,对于其他原始数据类型,我的问题是如何确定这个指针ptr指向一个数组还是一个简单的变量。如果不可能发现一个指针指向一个数组或一个简单的变量,那么建议一种我可以用来编写这个堆栈的push方法的技术。

EN

回答 4

Stack Overflow用户

发布于 2009-12-27 03:14:55

您所建议的不是一个好主意--在C++中不可能检测到指针是指向单个实例还是数组,但是这两个指针需要区别对待。

就我个人而言,我会使用std::stack适配器,它是C++标准的一部分。

票数 2
EN

Stack Overflow用户

发布于 2009-12-27 03:14:55

一旦数组“衰减”到指针,就不可能推断T*指向的数组的大小。

考虑让堆栈类型接受一对指针,一个指向数组中的第一个元素,另一个指向数组中的最后一个元素。或者,有一个重载的push方法-一个接受单个指针,另一个接受单个指针和size_t,告诉你有多少对象被指向。

我有点困惑,为什么你有一个T*作为参数。为什么不采用T,就像大多数stl容器上的"add“操作一样?在此期间,您是否知道std::stack的存在(它是stl中的“容器适配器”)?即使您有充分的理由重新实现它,查看STL中的API设计示例也是一个好主意。

票数 0
EN

Stack Overflow用户

发布于 2009-12-27 03:50:31

你的编译器已经负责分配和复制了。如果您这样定义推送:

代码语言:javascript
复制
push(T item)

编译器将为您复制项目,您可以将其填充到您的内部存储中。

另外,int和int[]是两种截然不同的类型。如果您想专门创建一个可以接受T[]的堆栈,您可以重载推送:

代码语言:javascript
复制
push(T[] items)

我假设您需要此功能,以便可以将这些项作为单独的项推送到堆栈上,而不是因为您想要一个异构容器。在此推送中,您可以迭代数组中的每一项并将其存储到您的内部存储中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1964082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档