【发布时间】:2012-05-10 01:40:41
【问题描述】:
在 Qt 中有类似的类来列出地图。这些类提供了一个返回 const_iterator 的 begin_const() 方法。文档说应该尽可能使用这些 const_iterators,因为它们更快。
如果实例本身是 const,STL 只会给你一个 const_iterator。只实现了一个 begin() 方法(为 const 重载)。
使用 iterator 和 const_iterator 读取元素时有什么区别吗?(我不知道为什么在 Qt 中它们有区别)
【问题讨论】:
-
当你从古老的stl切换到当前版本的c++标准库时,你会得到一个返回const_iterators的cbegin函数。另请注意,您可以将迭代器分配给 const_iterators,并且 begin 的 const 版本也返回一个 const 迭代器(全部用于 c++ 标准库)。
-
我的参考资料是 cplusplus.com。没有 cbegin()。你能给我指出一个不错的、更新的 STL 参考吗?现在问题更加紧迫,因为有一个 cbegin() 方法......
-
PlasmaHH 指向的函数是 C++11 的一部分:article 但我不知道使用迭代器而不是 const 迭代器是否存在性能问题。
-
@HWende:正如我在评论中所说,当您从 stl 切换到当前的 c++ 标准库时,您就拥有了它。 stl 没有它,而且由于上一次修订是从 ~2000 年开始的,所以它不会得到它。对于 c++ 标准库,en.cppreference.com/w/cpp/container/map 这几天似乎相当不错。
-
@HWende 为避免混淆,STL 与 C++ 标准不同,尽管术语经常混淆。底线是你说的对C++98、C++03也是对的,但是C++11提供了PlasmaHH提到的方法。