出于效率原因,我总是避免编写像这样的循环:
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 的书中读到过,它将是二次的而不是线性的,因为向量不知道其大小并且必须重复计数。但是现代编译器不会检测到这一点并对其进行优化吗?
empty
而不是检查size
是否为零。 - Billy ONealfor(std::size_t i = 0, i_size = vec.size(); i < i_size; ++i)
<- 问题解决了 =) - Viktor Sehr