由于元素std::set
按排序顺序排列,每个元素都是唯一的.此外,我们不能修改的元素set
,那么为什么库提供了begin()
和end()
功能,因为我们已经有cbegin()
和cend()
.
因为如果删除了这些功能,则无法std::set
在需要Container的许多地方使用.最明显的一个(对我而言)1:
for (auto x: mySet) { }
Run Code Online (Sandbox Code Playgroud)
因为循环基于范围的依赖是不可能的begin
和end
,而不是cbegin
或cend
(§6.5.4/ 1.3).
另一个会导致问题的例子是2函数,正如你在链接中看到的那样,它依赖于而不是依赖.std::begin
c.begin()
c.end()
基本思想是您不希望std::set
拥有与其他标准容器不同的接口.
1有很多这样的地方,这只是其中一个例子.
2请注意,即使std::cbegin
依赖const
-overload c.begin()
而不是onover c.cbegin()
.