empty()和size() == 0有区别吗
empty()和size()
这里说的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):
没区别
但到了C++11时,标准规定了list::size()
的时间复杂度是常数O(1)
,所以现在没区别了,不过还是推荐用empty()
接口,语义更清晰: