栈的弹出函数pop()实现方案探讨

news/2024/7/7 20:32:06
我想就上面的你说的3、4两条谈谈。
STL的确是没有返回两个参数,甚至没有返回参数。std::stack::pop方法的声明形式是void pop()。也许各个版本有所不同,但SGI STL和STLport是这样的。作为使用最广泛的两种STL实现,我们完全可以认为这是业界认为比较好的解决方案。我所言的STL如非特别指出,皆指STLport版本。
但是STL这种无参数的方式调用是极麻烦的。先调用empty()来判断堆栈是否为空,然后调用top()来取得栈顶元素,这时栈顶元素仍在栈中,你必须再调用pop()来将其出栈。这个empty-top-pop三步曲式的方法,比我的两参数方法还要麻烦得多,为什么STL要删简就繁,这是个耐人寻味的问题。
但std::stack的实现的确是解决了你书中那种当压入NULL指针时无法判断是栈空还是出栈成功的问题。可见这个问题是一定要解决的,而且不能通过形成程序员之间的协议——不得压入NULL来解决。
相对于你的单返回设计和STL的empty-top-pop三步曲,我所言的多返回值方案应该是两者的折衷,在效率和健壮性上都可以接受的普遍方案。当然,STL的方案更灵活一些,特别有获取栈顶元素但不想删除栈顶元素这样的变态需求时,写出来的代码非常自然优雅。




http://www.niftyadmin.cn/n/3647636.html

相关文章

想搞清楚ZooKeepe?助你面试一臂之力,含泪整理面经

接口概述: 接口是Java语言中的一种引用类型,是方法的"集合",所以接口的内部主要就是定义方法,包含常量,抽象方法(JDK 7及以前),额外增加默认方法和静态方法(JDK 8),额外增…

从实例重温工厂模式和单件模式

本文由恋花蝶最初发表于:http://blog.csdn.net/lanphaday,你可以在保持文章完整和保留本声明的情况下转帖、分发和印刷等。http://community.csdn.net/Expert/topic/4892/4892570.xml?temp.8727381今天一个好朋友发了上面这个贴,并邀我过去看…

想自学Java的速来!MySQL索引为何选择B+树?复习指南

前言 又到一年金九银十之际。 Java作为目前用户最多,使用范围最广的软件开发技术之一。 Java的技术体系主要由支撑Java程序运行的虚拟机,提供各开发领域接口支持的Java,Java编程语言及许多第三方Jvav框架构成。 其中,以Java的虚拟器为今天的着…

以讹传讹的小故事大道理

本文由恋花蝶最初发表于http://blog.csdn.net/lanphaday,可以转载、印刷等,但不可用于商业用途。并敬请保留本文完整,及包含本声明。昨天在公司内网看到同事贴出下面的这个小故事,终于是忍不住要反驳一下,就写了下次的…

成功入职字节跳动!只用了几百行代码写的百度搜索引擎,先收藏了

前言 MySQL 是最流行的关系型数据库管理系统(RDBMS)之一。 MySQL作为一个关系型数据库管理系统,因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。虽然功能未必很强大,但因为它…

基本A*算法python实现

本文由恋花蝶发表于http://blog.csdn.net/lanphaday,可以在保证全文完整的前提下任意形式自由传播,但必须保留本声明,违反必究。最近因为一个任务要用到A*算法,就用C实现了一份。不过只是用A*来检测从A点到B点有无通路&#xff0c…

Java面试java基础,锁机制(本地锁+分布式锁)超全分析!已开源

前言 微架构的出现,很好地适应了这个时代对快速发展变化的要求。它不再提倡一体化的项目设计,而是对项目进行有效的“业务区”(可以简单理解为不同的子系统〉划分,并利用合理的技术对业务性能做出提升和改善,同时又极大地简化了配…

关于MSVC下QT项目的警告级别

关于MSVC下QT项目的警告级别:用MSVC创建一个QT 项目.似乎是自动设置成最低级别,WARNNING 1 ! 记住一定要自己设置回第三级别! 否则,无数C中会导致万劫不复的错误会被编译器放过 。举个例子:A.hclass A{public :A(){m_buf new char[1024*1024…