函数内的STL容器何时将其数据保存在C++中?

Pip*_*ppi 0 c++ containers vector

我有一个函数,可以在向量容器中存储素数列表.在每次调用函数时,容器大小保持不变或增长.

bool prime(int n)
{
    ...
    static vector<int> v;
    vector <int>::iterator Iter;
    ...
    v.push_back(n);
}


int main()
{
    int num = 0;
    for (int i = 2; i <= n; ++i) {
      if (prime(i)) {
        ++num;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么存储在示例中有效.这个程序是否依赖?

Mar*_*ork 7

它起作用,因为变量是静态的:

   static vector<int> v;
// ^^^^^^
Run Code Online (Sandbox Code Playgroud)

当你在函数中声明这样的变量时,它意味着变量存在于函数调用之间.

从技术上讲,这是一个"静态存储持续时间"(SSD)对象.这些对象与程序一样长.大多数SSD对象是在调用main()之前创建的.但是在函数静态变量的情况下,它们不会在第一次调用函数之前创建.