在https://doc-snapshots.qt.io/qtcreator-extending/coding-style.html上,建议编写如下循环:
Container::iterator end = large.end();
for (Container::iterator it = large.begin(); it != end; ++it) {
//...;
}
Run Code Online (Sandbox Code Playgroud)
代替
for (Container::iterator it = large.begin(); it != large.end(); ++it) {
//...;
}
Run Code Online (Sandbox Code Playgroud)
由于我很少在任何代码中看到这种风格,我想知道end()的连续调用是否真的为stl容器上的大型循环添加了明显的运行时开销,或者编译器是否已经优化了这种情况.
编辑:许多非常好的评论指出:这个问题仅在循环内的代码不修改结束迭代器时才有效.否则,当然重复的结束呼叫是强制性的.
如果容器可能包含大量项目,从性能角度来看,应该写一个
for (auto p = std::begin(container); p != std::end(container); ++p) {...}
Run Code Online (Sandbox Code Playgroud)
或者应该在循环外访问容器的末端
const auto& theEnd = std::end(container);
for (auto p = std::begin(container); p != theEnd; ++p) {...}
Run Code Online (Sandbox Code Playgroud)
我只是想知道std::endO(1)是否适用于容器,如集合和列表以及向量.