STL容器List的一个小技巧

       在STL中,list是一个双向循环链表,所谓循环链表就是指链表的头部和尾部是连接在一起的,下面两段代码实现的功能是一样的,但是执行过程却有所不同:

//第一种
list<int> lst1;
if (lst1.empty())
{
    //do something
}

//第二种
list<int>lst2;
if (lst2.size() == 0)
{
    //do something
}

       上面两段代码执行的功能都一样的,都是判断list集合内是否有元素,但是实际运行的过程却有所不同。
       对于第一种方法,由于list是首尾相连的,因此lst1直接判断头部的下一个节点是否为NULL就知道list是否有节点了,其时间复杂度为O(1);
       对于第二种方法,size()函数的作用是获取节点的个数,因此lst2会从头到尾遍历一次链表,以得到链表节点的个数,其时间复杂度为O(n)。
       可见,虽然代码量差不多,但是时间复杂度上却相去甚远,当节点数较多的时候,两种写法相差的时间会越加明显。因此,当需要判断list的是否存在节点时,强烈建议使用list的empty()函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值