empty()和size()的优劣

通常下面代码:

if(c.size() == 0)
if(c.empty())

我们会觉得它们是是等价的。


为何empty()比较好?

主要是他们之间的效率有一定差距:

  • empty对任意的容器都是常数时间
  • 对于有点list实现,size需要线性时间
bool empty() const       //list的empty操作
{
   return node->next == node;
}

而size()则是通过区间遍历来数一数。


为何size()不能是常数的?

如果size()想在常数时间内实现,那么每个操作都要维护size的值。
splice()的特点就是能常数实现链接。如果想实现size的常数,那么就需要放弃splice()的常数特点(需要遍历维护).
所以就要看你使用的list是把 size() or splice()放在第一位。
但是使用empty肯定总是花费常数的时间。


参考:

effective STL

转载于:https://www.cnblogs.com/Przz/p/6590975.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值