由于std::set
的元素按排序顺序排列,并且每个元素都是唯一的。另外,我们无法修改set
的元素,因此为什么该库提供begin()
和end()
函数,因为我们已经有了cbegin()
和cend()
。
最佳答案
因为如果删除了这些功能,您将无法在需要Container的许多地方使用std::set
。最明显的一个(对我而言)1:
for (auto x: mySet) { }
因为基于范围的for循环依赖
begin
和end
而不是cbegin
或cend
(第6.5.4/1.3节),所以将不可能。另一个可能造成问题的示例是
std::begin
2函数,如您在链接中所见,该函数依赖c.begin()
而不是c.end()
。基本思想是,您不希望
std::set
具有与其他标准容器不同的接口(interface)。1有很多这样的地方,这只是其中的一个例子。
2请注意,即使
std::cbegin
也依赖const
-c.begin()
的重载,而不是c.cbegin()
。