Я понимаю, почему 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
@Morwenn, но не было бы необходимости иметь 'count()' в любом другом контейнере, так как все они уже имеют 'size()'. – TemplateRex
@rhalbersma: И нет необходимости иметь 'count()' в любом контейнере, так как у нас уже есть 'std :: distance()'. –