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):
list.size(C++98)code

沒區別

但到了C++11時,標準規定了list::size()的時間複雜度是常數O(1),因此如今沒區別了,不過仍是推薦用empty()接口,語義更清晰:
list.size(C++11)blog

相關文章
相關標籤/搜索