关于STL中的pop操作为什么没有返回值

来源:互联网 发布:软件企业认定 招标 编辑:程序博客网 时间:2024/04/30 04:15

今天写代码的时候遇到了个错误。背景是实现一个具有min()操作的栈结构。实现的方案就是在每个栈元素中除了包含入栈的数据之外,同时还保留一个栈的min元素的值。

因为偷懒,所以就只实现了push(), pop()和min()三个操作。min是返回栈顶的元素的min部分,pop返回栈顶元素的数据部分,并将栈顶元素弹出。


因为要验证,最后就写了如下的代码:

while (!s.empty()) {    cout << s.min() << ',' << s.pop() << endl;}


结果就悲剧了阿~ 不过好在悲剧了,让我意识到了这样写的危险性。又给我在顺序点这个方面提了个醒:函数参数求值的顺序是不确定的。

想到这里,就觉得写出无漏洞的代码真的好难。这种潜在的可能会有副作用的操作真心会容易出错的。进而考虑到关于栈操作,STL中的操作也是,提供top()类似的操作。

在pop()之前要先用top()访问,pop()本身是不返回元素的。这个想法看来还真是有意义的,防止在访问元素时候潜在的副作用。


进一步想起来,在实现各种操作的时候,函数的实现也是不要验证empty()的,用户需要自己验证empty()和full(),否则会出现未定义的行为。