c++ - 多次使用时,将 vector 大小存储到 int 变量中是否更有效?

标签 c++

所以如果我们有下面的代码:

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/

相关文章:

c++ tcp 多线程客户端/服务器 - 如何与线程 sockethandler 通信?

c++ - 官方c++文档在哪里

c++ - 什么是 C++ 配置文件?

c++ - 如何在不使用 C++0x 的情况下创建 lambda 函数来匹配 boost::function 参数?

c++ - 在传递引用而不是指针时如何为链表分配内存?

c++ - 如何一次给一个函数一个参数?

c++ - 在 unsigned char 数组的数组中读取充满字符串(由换行符分隔)的文件(反之亦然)的最快方法是什么?

c++ - WINAPI:查看来自其他进程的消息

C++ map<int, vector <int>> 段错误

c++ - 浮点异常