栈的弹出函数pop()实现方案探讨
2008-06-10 12:37
302 查看
我想就上面的你说的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的方案更灵活一些,特别有获取栈顶元素但不想删除栈顶元素这样的变态需求时,写出来的代码非常自然优雅。
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的方案更灵活一些,特别有获取栈顶元素但不想删除栈顶元素这样的变态需求时,写出来的代码非常自然优雅。
相关文章推荐
- 栈的弹出函数pop()实现方案探讨
- 栈的弹出函数pop()实现方案探讨
- 栈的弹出函数pop()实现方案探讨
- 从SQL Server向Oracle迁移的技术实现方案(七)常用SQL语法与函数
- iOS实现自定义的弹出视图(popView)
- Android实现弹出登陆框的方案
- 快速弹出窗口实现四:popWindow
- 定义函数实现弹出消息框的效果
- Android沉浸式状态栏的实现方案探讨
- jquery pop弹出层下拉效果实现
- Android推送实现方案探讨
- 企业内部实现软件测试自动化的方案探讨
- 【数据结构】堆的实现(包括:默认成员函数,插元素push,删元素pop,访问根节点top,判空,大小)
- android pop自定义弹出窗口实现
- SSO 实现方案探讨
- 第8周-任务1-方案1-复数类中运算符重载(成员函数实现)
- php array_pop()数组函数将数组最后一个单元弹出(出栈)
- 安卓推送技术方案实现探讨
- 使用Style实现的popwindow弹出和收起的动画效果
- iOS实现自定义的弹出视图(popView)