所以如果我们有下面的代码:
vector<string> vec1;
//initialize vec1 to contain thousands of strings
for (int i = 0; i < vec1.size(); i++) {
//.....
}
for (int j = 0; j < vec1.size(); j++){
//......
}
声明一个 int vec_size = vec1.size() 并像这样使用它会更快吗:
int vec_size = vec1.size();
for (int i = 0; i < vec_size; i++) {
//.....
}
for (int j = 0; j < vec_size; i++) {
//.....
}
如果是,为什么?
最佳答案
取决于编译器优化设置。在某些优化设置下,编译器可能意识到字符串没有改变,因此只调用函数一次。
在for
循环,表达式 j < vec1.size()
每次迭代都会调用。如果 vector 大小在循环中没有改变,那就是一堆浪费的函数调用。调用一次并分配给一个变量可以将执行减少到一次调用 std::vector::size()
.
顺便说一句,size()
方法返回 size_t
, 通常与 unsigned int
兼容. ( vector 不能有负数)。
所以你的循环应该是:
const size_t vec_size = vec1.size();
for (unsigned int i = 0; i < vec_size; ++i)
{
//...
}
将 vector 大小变量声明为常量允许编译器执行更多优化;你告诉编译器变量不会改变它的值。
关于c++ - 多次使用时,将 vector 大小存储到 int 变量中是否更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35052586/