我明白为什么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