一般来说,出于效率和速度的目的,缓存结束迭代器(特别是 STL 容器)是一个好主意吗?例如下面的代码:
std::vector<int> vint;
const std::vector<int>::const_iterator end = vint.end();
std::vector<int>::iterator it = vint.begin();
while (it != end)
{
....
++it;
}
什么情况下最终值会失效?会从容器中擦除导致 end 无效allSTL 容器还是只是一些?
在简单的情况下vector
, the end
当您从容器中添加或删除元素时,迭代器将发生变化;不过,通常最安全的假设是,如果您在迭代容器时改变容器,all它的迭代器变得无效。在任何给定的 STL 实现中,迭代器的实现方式可能不同。
关于缓存end
迭代器——缓存它当然是有效的,但要了解它在您的情况下是否实际上更快,最好的选择是分析您的代码并查看。在检索时end
来自 a 的迭代器vector
可能是使用最新的 STL 库和编译器的快速实现,我have在过去的项目中工作,其中缓存end
迭代器给我们带来了显着的速度提升。 (这是在 PlayStation 2 上进行的,所以请持保留态度。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)