我正在努力弄清楚如何将2D数组声明为全局变量,以便我可以在我的所有方法中使用它。到目前为止它只在单个方法中声明,因此它不能用于其他方法。我已经想出如何通过在我的代码开头输入string * array = new string [1]来声明一个普通的字符串数组方法(然后我根据变量改变这个数组的大小)但我不确定如何使用2D数组:
void WordSearch::ReadSimplePuzzle()
int columns = 9;
int rows = 9;
string **simple2DArray = new string*[columns];
for (int i = 0; i < columns; i++)
simple2DArray[i] = new string[rows];
//code that populates the array too long to post but not relevant.
然后我有一个方法,我需要访问simple2DArray,但我无法弄清楚如何在代码的开头定义它,任何帮助将不胜感激。
答案 0 :(得分:1)
如果您的列和行变量永远不会更改,则可以执行以下操作:
const int columns = 9;
const int rows = 9;
string simple2DArray[columns][rows];
通过静态分配内存,您现在不必担心释放内存。
由于您澄清了直到运行时才知道大小,因此您将无法静态分配内存。一个非常简单的解决方案是:
std::vector<std::vector<std::string>> simple2DArray; // This will have size 0 at start
然后,在初始化步骤中,只需执行以下操作:
simple2DArray.resize(rows);
for (auto& row : simple2DArray)
{
row.resize(columns);
}
当然,还有其他方法可以做到这一点,例如在一个大小的行*列中分配所有内存,然后将其暴露,就好像它是一个二维矩阵,但这可能对你的目的来说太过分了。
答案 1 :(得分:1)
我的建议是隐藏功能界面背后的数组。
std::string const& getElement(size_t m, size_t n);
void setElement(size_t m, size_t n, std::string const& val);
调用函数具有2D数组的抽象,但是他们不需要知道它在代码中的表示方式。
在实施中,您有多种选择:
std::vector
。仍然需要绘制指数。std::vector<std::vector<std::string>>
。没有所需指数的映射。答案 2 :(得分:0)
我正在努力弄清楚如何将2D数组声明为全局 变量,所以我可以在我的所有方法中使用它。
与任何全局变量一样,您需要在全局空间中声明指针:
s
然后你可以从你的方法中分配给它
string **simple2DArray;
答案 3 :(得分:0)
如果您要让它更容易解决竞争性编程问题,请查看问题中给出的约束。
例如,如果矩阵可以是带有1 <= N <= 1000
的N * N,则可以全局声明
int arr[1000][1000];
下面是一些更好的主意的代码。
//global declarations
int N;
int arr[1000][1000];
int functionA()
{
// some code
}
int functionB()
{
// some code
}
int main()
{
// Get the input of both N and your array arr
// Now you can use them in any where in your code
}