gpt4 book ai didi

c++ - vector 迭代器 < 或 !=

转载 作者:IT老高 更新时间:2023-10-28 12:42:43 28 4
gpt4 key购买 nike

谁能帮我理解 != 中是否有很大的不同?和 <当谈到 for 中的 vector 迭代器时循环?

我的意思是,无论你是否使用 !=< ,结果应该是一样的吧?

for (vector<int>::iterator i = vec.begin(); i != vec.end(); i++)
// DO STUFF
for (vector<int>::iterator i = vec.begin(); i < vec.end(); i++)
// DO STUFF

我知道最常用的方法是使用 != , 但会 <如果使用会是个大问题吗?

最佳答案

operator<仅支持 random access iterators . std::vector::iterator是一个随机访问迭代器,所以 i != vec.end()i < vec.end()受支持且有效,在您的示例中没有任何区别。

如果您有一个不支持随机访问迭代器的容器(例如 std::list ),i < list.end()不会编译。

一般的建议是仅在必要时使用后缀增量,因为当迭代器不平凡时它可能会创建不必要的拷贝,所以 ++i更干净,可能更快。

另外,如果循环调用了一个函数,该函数的定义在这个翻译单元中不可用vec.end()将在每次循环迭代时从内存中重新加载,这可能会导致不必要的缓存未命中。您可以通过将值保存到局部变量中来避免重新加载,这样编译器就可以确定任何其他函数都无法访问该局部变量:

for(vector<int>::iterator i = vec.begin(), j = vec.end(); i < j; ++i)
// ...

更好的是,您可能希望使用 range-for 循环来避免这些性能缺陷:

for(auto const& elem : vec)
// ...

关于c++ - vector 迭代器 < 或 !=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48520783/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com