有没有办法从函数全局声明一个可变大小的向量?

Is there a way to declare a variable sized vector globally from a function?

#include <bits/stdc++.h>

using namespace std;

int grid(int x, int y)
{
    static vector<vector<int>> vec(x + 1, vector<int>(y + 1, 0));
    if (vec[x][y] != 0)
        return vec[x][y];
    if (x == 0 || y == 0)
        return 0;
    if (x == 1 && y == 1)
        return 1;
    vec[x][y] = grid(x - 1, y) + grid(x, y - 1);
    return vec[x][y];
}

int main()
{
    int x, y;
    cin >> x >> y;
    cout << grid(x, y);
    return 0;
}

我在 grid 函数中用向量大小作为参数初始化了一个二维向量“vec”。如果我在其他一些函数中需要“vec”,我将如何使用它而不将其作为参数传递?

我无法全局初始化向量,因为它的大小可变。

当向量的大小取决于用户输入时,您显然无法创建全局向量。但是您可以调整现有矢量的大小。

vector<vector<int>> vec; // create at zero size

int grid(int x, int y)
{
    vec.resize(x + 1, vector<int>(y + 1, 0)); // resize to required size
    ...

您正在使用 c++ 而非 c 进行开发。您可以使用 class 来实现这一点。

看起来像:

using namespace std;
class grid
{
public:
   grid(int x, int y)
   {
       mGrid = std::vector<std::vector<int>>(x + 1, vector<int>(y + 1, 0));
   }

   int getValue(int x, int y)
   {
       return vec[x][y];
   }

private:
    std::vector<std::vector<int>> mGrid;
};


int main()
{
    int x, y;
    cin >> x >> y;
    grid myGrid(x, y);
    cout << myGrid.getValue(x, y);
    return 0;
}

并且您在 class 中创建的每个方法都可以访问这个名为 mGrid 的成员。

否则,如果您不能使用 class,您可以创建全局矢量并在网格方法期间更改它:

using namespace std;

vector<vector<int>> vec;

int grid(int x, int y)
{
    vec(x + 1, vector<int>(y + 1, 0));
    if (vec[x][y] != 0)
        return vec[x][y];
    if (x == 0 || y == 0)
        return 0;
    if (x == 1 && y == 1)
        return 1;
    vec.resize(x + 1, vector<int>(y + 1, 0));
    return vec[x][y];
}

int main()
{
    int x, y;
    cin >> x >> y;
    cout << grid(x, y);
    return 0;
}

记得添加错误处理或异常以避免核心转储:)