我明白爲什麼std::forward_list
does not have a size()
member function,因爲O(1)
版本會弄亂某些splice()
過載的複雜性,並且因爲O(N)
版本會與標準庫的其餘所有容器不一致。爲什麼不是std :: forward_list給定一個count()成員函數?
,這也是事實,無論std::list
和std::forward_list
已經擁有相同的語義從<algorithm>
角落標準庫(merge()
,reverse()
,remove()
,remove_if()
,unique()
,sort()
)的他們的堂兄弟其他幾個成員函數。
那麼爲什麼count()
成員函數的O(N)
複雜度提供給std::forward_list
,它的返回語義是std::distance(std::begin(some_list), std::end(some_list))
?
基本上,STL類已經足夠大了,並且在其中一個上添加這樣的成員函數會觸發用戶需要的所有其他STL容器中的東西。而且,正如你所說(在提案中已經提到過),'std :: distance'可以在沒有更多時間的情況下獲得大小,所以幾乎沒有什麼傷害。 – Morwenn 2013-04-29 13:35:30
@Morwenn,但不需要在任何其他容器中都有count(),因爲它們都已經有size()。 – TemplateRex 2013-04-29 13:36:50
@rhalbersma:因爲我們已經有'std :: distance()',所以不需要在任何容器中都有count()。 – 2013-04-29 13:38:06