c ++将2D数组声明为全局变量

时间:2018-03-31 19:12:18

标签: c++ arrays variables global

我正在努力弄清楚如何将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,但我无法弄清楚如何在代码的开头定义它,任何帮助将不胜感激。

4 个答案:

答案 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数组的抽象,但是他们不需要知道它在代码中的表示方式。

在实施中,您有多种选择:

  1. 使用1D阵列。将2D索引映射到1D数组中的右索引。
  2. 使用std::vector。仍然需要绘制指数。
  3. 使用2D数组。没有所需指数的映射。
  4. 使用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 
    
}