這裏說的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