出于效率原因,我总是避免编写这样的循环:
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 中读到它将是二次的而不是线性的,因为 vector 不知道它的大小并且必须反复计数。但是现代编译器不会检测到这一点并对其进行优化吗?
最佳答案
vector::size()
是恒定时间的,通常实现为经过优化的简单内联函数。不要费心手动优化它。
关于c++ - 在容器上(循环期间)重复调用 size() 是否不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3221969/