这里说的empty()
和size()
都是STL的容器中提供的接口,分别用来判断当前容器是否为空和获取当前包含的元素个数函数
其实按道理来讲二者应该是相等的,并且STL容器中通常也是经过判断size() == 0
来实现empty()
函数的。但«effective STL»指出,在C++98中,list
的实现可能没有记录元素个数m_size
这个变量,从而致使接口size()
的时间复杂度为O(n)
。但C++标准保证empty()
接口的时间复杂度是常数的O(1)
。因此推荐使用empty()
判空。下图是cppreference中对list::size()
的时间复杂度的描述(C++98):
code
但到了C++11时,标准规定了list::size()
的时间复杂度是常数O(1)
,因此如今没区别了,不过仍是推荐用empty()
接口,语义更清晰:
blog