首页  >  问答  >  正文

c++ - 循环判断条件为vec.size(),每次调用会不会优化?需要特地先求出size()吗?

在遍历vector容器时,使用如下方法遍历:

for(int i=0; i<vec.size(); ++i)
    //do something

循环条件中使用了.size()操作,我用g++测试,每次编译器都会执行这个操作,那么效率会不会有影响?编译器不会优化吗?

需不需要提前求出来,比如:

const int size = vec.size();
for(int i=0; i<size; ++i)
    //do something
怪我咯怪我咯2715 天前686

全部回复(2)我来回复

  • 怪我咯

    怪我咯2017-04-17 15:09:09

    一般情况下请使用 iterator 或 range for 遍历 vector,如果必须使用 index,则需要注意在循环过程中 vector 的长度是否会发生变化。

    std::vector<int> vi;
    
    for (auto it = vi.begin(); it != vi.end(); ++it)
      // do something
    
    for (auto & i : vi)
      // do something

    回复
    0
  • 阿神

    阿神2017-04-17 15:09:09

    如果指定了优化o2之类的参数可能会优化,如果你没有在循环中修改vector的大小的话,其实因为vector的大小是一个变量存储的,所以这个过程并不是代价很高。

    回复
    0
  • 取消回复