Fra*_*ank 12 c++ optimization loops stl
出于效率原因,我总是避免编写这样的循环:
for(std::size_t i = 0; i < vec.size(); ++i) { ... }
哪里vec是STL容器.相反,我要么
const std::size_t vec_size = vec.size();
for(std::size_t i = 0; i < vec_size; ++i) { ... }
或使用容器迭代器.
但第一个解决方案真的有多糟糕?我记得在Meyers中读到它将是二次而不是线性的,因为矢量不知道它的大小而且必须反复计算.但现代编译器不会检测到这种情况并将其优化掉吗?
Mar*_*tos 10
vector::size()是恒定时间,通常实现为一个简单的内联函数,并进行优化.不要打扰手工优化它.
我记得在Meyers中读到它将是二次而不是线性的,因为矢量不知道它的大小而且必须反复计算.
你要vector和list困惑.vector的大小值保存在向量中; list要求横向实际列表.