您的位置:首页 > 运维架构

栈的弹出函数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的方案更灵活一些,特别有获取栈顶元素但不想删除栈顶元素这样的变态需求时,写出来的代码非常自然优雅。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: