缓存最终迭代器 - 好主意还是坏主意?

2023-12-26

一般来说,出于效率和速度的目的,缓存结束迭代器(特别是 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(使用前将#替换为@)

缓存最终迭代器 - 好主意还是坏主意? 的相关文章

随机推荐