如果我们无法修改set元素,为什么std :: set提供了begin()和end()

NJM*_*JMR 3 c++ set

由于元素std::set按排序顺序排列,每个元素都是唯一的.此外,我们不能修改的元素set,那么为什么库提供了begin()end()功能,因为我们已经有cbegin()cend().

Hol*_*olt 7

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

for (auto x: mySet) { }
Run Code Online (Sandbox Code Playgroud)

因为循环基于范围的依赖是不可能的beginend,而不是cbegincend(§6.5.4/ 1.3).

另一个会导致问题的例子是2函数,正如你在链接中看到的那样,它依赖于而不是依赖.std::beginc.begin()c.end()

基本思想是您不希望std::set拥有与其他标准容器不同的接口.

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

2请注意,即使std::cbegin依赖const-overload c.begin()而不是onover c.cbegin().