Hip*_*der 18 c++ containers iterator stl
一般来说,为了效率和速度目的,缓存一个结束迭代器(特别是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;
}
Run Code Online (Sandbox Code Playgroud)
在什么条件下最终价值会失效?从容器中擦除会导致所有 STL容器中的结尾无效还是只有一些?
Bla*_*way 15
在a的简单情况下,当您从容器中添加或删除元素时vector,end迭代器将会更改; 但是,通常最安全的假设是,如果在迭代容器时改变容器,则它的所有迭代器都将变为无效.在任何给定的STL实现中,迭代器可以以不同方式实现.
关于缓存end迭代器 - 它对于缓存它当然是有效的,但是为了找出它在你的情况下实际上是否更快,最好的选择是你能够分析你的代码并查看.end从a中检索迭代器vector可能是最近的STL库和编译器的快速实现,我已经研究了过去的项目,缓存end迭代器给我们带来了显着的速度提升.(这是在PlayStation 2上,所以请带上一粒盐.)
| 归档时间: |
|
| 查看次数: |
2336 次 |
| 最近记录: |