理论上而言,这二者等价,但是优先使用empty的理由很简单:
对于所有标准容器,empty都是常数时间操作,而某些list的size耗费线性时间。
list独有的splice操作导致了这种情况,举例而言:
1 | list<int> list1; |
这段程序只有在list2中在含5的节点之后含有10的节点时才工作。
关键在于list1中有多少个元素?应该是list1之前的元素加上之后链接过来的元素.除非遍历一次,不然编译器不会知道具体个数。
list的设计者主要希望它在插入删除操作中具有较好性能,如果list的size希望有常数时间,那么splice必须遍历自身然后更新size,这样造成了splice具有线性时间。不管怎么说,list总要在size或者splice之间做出取舍。
但是,empty必然是常数时间,那我们为啥不用呢?