由于元素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::beginc.begin()c.end()
基本思想是您不希望std::set拥有与其他标准容器不同的接口.
1有很多这样的地方,这只是其中一个例子.
2请注意,即使std::cbegin依赖const-overload c.begin()而不是onover c.cbegin().
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |