for(int i = 0; i <myVector.size(); ++ i)size()被调用多少次?

Jam*_*ond 1 c++ stl

如果我有一个myVectorSTL向量并执行这样的循环:

for(int i=0;i<myVector.size();++i) { ... }
Run Code Online (Sandbox Code Playgroud)

C++编译器是否size()只能调用一次,或者它会被调用size()+1一次?

我有点困惑,有人可以帮忙吗?

Mic*_*urr 5

逻辑上,myVector.size()每次循环迭代时都会调用 - 或者至少编译器必须生成代码,就像每次调用它一样.

如果优化器可以确定向量的大小不会在循环体中发生变化,则可以将调用提升到size()循环外部.请注意,通常,vector::size()内联只是指向结尾和向量开头的指针之间的简单区别(或类似的东西 - 可能是跟踪元素数量的成员的简单加载).

因此,实际上可能没有理由担心会发生什么vector::size().

请注意,这list::size()可能是一个不同的故事--C++ 03标准允许它是线性复杂性(虽然我认为这是罕见的,并且C++ 0x标准将list::size()要求变为恒定的复杂性).