如果我们不能修改set元素,为什么std::set会提供begin()和end()

Why std::set provides begin() and end() if we can not modify the set elements

本文关键字:set end begin std 不能 我们 修改 元素 为什么 如果      更新时间:2023-10-16

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

因为如果删除这些函数,就无法在许多需要Container的地方使用std::set。最明显的一个(对我来说(1

for (auto x: mySet) { }

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

这会带来问题的另一个例子是std::begin2函数,正如您在链接中看到的,它依赖于c.begin()而不是c.end()

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

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

注意,即使是std::cbegin也依赖于c.begin()const-过载而不是c.cbegin()

cbegin()cend()添加到C++11中。CCD_ 22和CCD_。