vector.size()函数计算重吗?

Dan*_*iel -1 c++

只是想知道大小函数计算代价是否昂贵?

vector<someBigType> vec;
vec.push_back(something0);
for(unsigned i = 0; i < a bigNumber; ++i)
{

    // do something ...

    // measure the size
    int size1 = vec.size();

    // A lot of push_backs (vec may grow very large)
    vec.push_back(something);

    // Or shall I just use counter++, whenever a push_back is called?

    // measure the size again
    int size2 = vec.size();

    int delta = size2-size1;

    // Use delta to do something
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*our 7

如果我们查看std :: vector :: size的 cppreference条目,它会说:

复杂

不变.

所以它在恒定的时间运行.这与C++标准草案一致,Table 96 — Container requirements后者列出了size()常量的复杂性.

  • 一如既往,我们应该注意到,对于某个大的n值,O(1)只需要比O(n)更快.对于小n而言,具有大常数的O(1)可以比O(n)算法慢得多.所以剖析仍然是明智的.然而,在任何实现中,来自`vector :: size()`的这种退化的行为将是对自然的憎恶. (5认同)