0

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

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;
    }
}

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

4

1 回答 1

7

它之所以有效,是因为变量是静态的:

   static vector<int> v;
// ^^^^^^

当您在函数中声明这样的变量时,这意味着该变量存在于函数调用中。

从技术上讲,这是一个“静态存储持续时间”(SSD)对象。这些对象与程序一样长。大多数 SSD 对象都是在调用 main() 之前创建的。但是对于函数静态变量,它们直到第一次调用函数时才创建。

于 2013-03-20T03:56:44.550 回答