迭代器和const_iterator的效率不同(STL)
Different efficiency of iterator and const_iterator (STL)
在Qt中,有类似的类来列出映射。这些类提供返回const_iterator的 begin_const(( 方法。文档说,应尽可能使用这些const_iterators,因为它们更快。
STL 仅当实例本身是 const 时为您提供const_iterator。只实现了一个 begin(( 方法(对于 const 重载(。
使用迭代器和const_iterator读取访问元素时有什么区别吗?(我不知道为什么它们在Qt中有所不同(
文档说,应尽可能使用这些const_iterators,因为它们更快。
确实如此。从 http://qt-project.org/doc/qt-4.8/containers.html#stl-style-iterators:
对于每个容器类,有两种 STL 样式的迭代器类型:一种提供只读访问,另一种提供读写访问。应尽可能使用只读迭代器,因为它们比读写迭代器更快。
说什么蠢话。
安全?是的。更快?即使情况如此(显然不是 gcc 和 clang(,也很少有理由更喜欢 const 迭代器而不是非 const 迭代器。这是过早的优化。更喜欢常量迭代器而不是非常量迭代器的原因是安全性。如果不需要修改指向的内容,请使用 const 迭代器。想想一些维护程序员会对你的代码做什么。
就begin
与cbegin
而言,这是一个C++11的补充。这允许 auto
关键字使用 const 迭代器,即使在非 const 设置中也是如此。
使用 const 的最佳理由是避免错误并使代码的意图更加清晰。
可以想象,在某些情况下,编译器可以执行一些使用非常量迭代器无法实现的优化。 别名(当多个变量和参数可能引用同一对象时(通常是某些优化的抑制因素。 如果编译器可以通过注意到 const-itrator 永远无法更改值来排除某些形式的别名,那么它可能会启用一些优化。
另一方面,我希望编译器足够好,能够以这种方式使用恒常性,以便能够通过流分析得出相同的结论。
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 在STL容器中使用模板类
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 将stl字符串缩小到小于15个字符的容量
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 检查函数返回类型是否与STL容器类型值相同
- STL算法函数在多个一维容器上的使用
- STL/标准C++容器的最佳效率如何
- stl数据结构的堆栈上输出参数与返回值的效率
- 迭代器和const_iterator的效率不同(STL)
- 每个C++STL收集操作的算法效率
- 使用大对象时的STL效率
- STL矢量元素去除效率
- 固定大小数组的STL算法效率
- 基于函数返回的stl容器的构造效率
- STL 映射插入效率:[] 与插入