stack.size() vs stack.empty()



要检查堆栈是否为空,我们可以使用if(stack.size())。那为什么我们有stack.empty()
是否存在这些结果可能不同的情况,或者使用其中一个结果比使用另一个结果有任何优势。

在某种程度上,这是风格的选择

就我个人而言,我认为依赖隐式布尔转换应该局限于具有类似指针语义的东西:实际指针、智能指针、std::optional出现在脑海中。在这种情况下,它无处不在,感觉很自然。

在其他情况下,这感觉很奇怪。尽可能清楚地传达你的意图!在我看来,if(!stack.empty())if(stack.size())更清楚、更直接地传达意图。

然而,风格并不是故事的全部。如果使用size样式作为一般规则,则这可能会成为性能问题,因为您同时依赖size()empty()的速度。

想象一个不存储其大小的链表类型。它的empty()函数仍然很快,因为它相当于检查一个指针。但它的size()必须遍历整个列表才能确定项目的数量。这可能是一个更昂贵的操作。

最新更新