有没有一种方法可以从函数全局声明一个可变大小的向量


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

我初始化了一个2D矢量">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;
}

在类中创建的每个方法都可以访问名为mGrid的成员。

否则,如果你不能使用类,你可以创建全局向量,并在网格方法中更改它,比如:

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

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

最新更新