【发布时间】:2013-04-29 13:31:41
【问题描述】:
我理解为什么std::forward_listdoes not have a size() member function,因为O(1) 版本会弄乱某些splice() 重载的复杂性,并且因为O(N) 版本会与标准库的所有其余容器不一致.
同样,std::list 和 std::forward_list 已经有几个其他成员函数,它们的语义与标准库的 <algorithm> 角落中的表亲相同(merge()、reverse()、@987654332 @、remove_if()、unique()、sort())。
那么为什么不向std::forward_list 提供具有返回std::distance(std::begin(some_list), std::end(some_list)) 语义的O(N) 复杂性的count() 成员函数?
【问题讨论】:
-
基本上,STL 类已经足够大,在其中一个上添加这样的成员函数会触发用户在所有其他 STL 容器中想要它的东西。而且,正如您所说(并且在提案中已经提到),
std::distance可以立即为您获得尺寸,因此几乎没有伤害。 -
@rhalbersma 我认为许多用户仍然会问“为什么在
std::forward_list中有一个count函数,而它在其他容器中不存在?”,即使他们已经有 @987654343 @. -
@rhalbersma 根据经验,容器具有它们可以有效支持的成员函数,或者实现不同于通用实现的地方。
std::map有一个find成员函数,因为std::find的语义不合适,而vector有一个operator[],因为它可以实现为在恒定时间内运行。std::count函数不满足这两个:它不是“可以有效地完成此操作”的承诺,并且它的语义与非成员std::distance没有区别。那么为什么要添加呢?它有什么好处? -
@rhalbersma 等待范围会以某种方式减少详细信息。
-
@Morwenn:不过,这将是一个漫长的等待 :(C++14 中没有范围
标签: c++ c++11 stl containers forward-list