相关疑难解决方法(0)

对于stl容器,end()是一个昂贵的操作

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容器上的大型循环添加了明显的运行时开销,或者编译器是否已经优化了这种情况.

编辑:许多非常好的评论指出:这个问题仅在循环内的代码不修改结束迭代器时才有效.否则,当然重复的结束呼叫是强制性的.

c++ performance containers stl

19
推荐指数
2
解决办法
1619
查看次数

在C++中,对于所有容器类型,std :: end保证是O(1)吗?

如果容器可能包含大量项目,从性能角度来看,应该写一个

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)是否适用于容器,如集合和列表以及向量.

c++

7
推荐指数
2
解决办法
239
查看次数

标签 统计

c++ ×2

containers ×1

performance ×1

stl ×1