4.调用empty而不是检查size==0


理论上而言,这二者等价,但是优先使用empty的理由很简单:
对于所有标准容器,empty都是常数时间操作,而某些list的size耗费线性时间。

list独有的splice操作导致了这种情况,举例而言:

1
2
3
4
5
6
7
list<int> list1;
list<int> list2;
...
//将list2中从第一次出现5到第二次出现10的所有节点移动到list1的末尾
list1.splice(list1.end(), list2,
find(list2.begin(), list2.end(), 5),
find(list2.rbegin(),list2.rend(), 10).base());

这段程序只有在list2中在含5的节点之后含有10的节点时才工作。
关键在于list1中有多少个元素?应该是list1之前的元素加上之后链接过来的元素.除非遍历一次,不然编译器不会知道具体个数。
list的设计者主要希望它在插入删除操作中具有较好性能,如果list的size希望有常数时间,那么splice必须遍历自身然后更新size,这样造成了splice具有线性时间。不管怎么说,list总要在size或者splice之间做出取舍。
但是,empty必然是常数时间,那我们为啥不用呢?