由于std::set的元素按排序顺序排列,并且每个元素都是唯一的。另外,我们无法修改set的元素,因此为什么该库提供begin()end()函数,因为我们已经有了cbegin()cend()

最佳答案

因为如果删除了这些功能,您将无法在需要Container的许多地方使用std::set。最明显的一个(对我而言)1:

for (auto x: mySet) { }

因为基于范围的for循环依赖beginend而不是cbegincend(第6.5.4/1.3节),所以将不可能。

另一个可能造成问题的示例是 std::begin 2函数,如您在链接中所见,该函数依赖c.begin()而不是c.end()

基本思想是,您不希望std::set具有与其他标准容器不同的接口(interface)。

1有很多这样的地方,这只是其中的一个例子。

2请注意,即使std::cbegin也依赖const-c.begin()的重载,而不是c.cbegin()

10-07 19:15
查看更多