如果我们不能修改set元素,为什么std::set会提供begin()和end()
Why std::set provides begin() and end() if we can not modify the set elements
由于std::set
的元素按排序顺序排列,并且每个元素都是唯一的。此外,我们不能修改set
的元素,那么为什么库提供begin()
和end()
函数,因为我们已经有了cbegin()
和cend()
。
因为如果删除这些函数,就无法在许多需要Container的地方使用std::set
。最明显的一个(对我来说(1:
for (auto x: mySet) { }
这是不可能的,因为基于循环的范围依赖于begin
和end
,而不是cbegin
或cend
(§6.5.4/1.3(
这会带来问题的另一个例子是std::begin
2函数,正如您在链接中看到的,它依赖于c.begin()
而不是c.end()
。
基本思想是,您不希望std::set
具有与其他标准容器不同的接口。
1有很多这样的地方,这只是其中的一个例子。
注意,即使是std::cbegin
也依赖于c.begin()
的const
-过载而不是c.cbegin()
。
cbegin()
和cend()
添加到C++11中。CCD_ 22和CCD_。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 为什么我无法更改"set<set>"循环中的值<int>
- 对于set上的循环-获取next元素迭代器
- 在声明中合并两个常量"std::set"(不是在运行时)
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将 std::set 与基于键的比较器一起使用
- 如何使用set实现无序数据结构?
- 使用运算符调用 void 函数时出错<set>
- 修改"std::set"中用户定义类型的值
- 反转依赖于 end() 的迭代器
- std::multimap<std::chrono::milliseconds, T>::rbegin 在 MSVS-13 中指向 end()?
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 为什么在查找元素时需要使用 set.find(x) != set.end()
- 使用 std::set 的 .begin() 和 .end() 函数会产生意想不到的结果
- 完全从c 中从std :: set.end()返回的内容
- set::end++的值是多少?
- set::erase()作为参数set::end时的行为如何?
- 如果我们不能修改set元素,为什么std::set会提供begin()和end()
- 对std::inserter对std::set使用.begin()和.end()有区别吗?