在进入主函数之前获取输入

Take input before entering main function

我正在尝试全局声明一个二维数组,其中的行数和列数留给用户输入。我正在尝试过去一个小时,但找不到任何解决方法。帮帮我。

#include<iostream>
using namesapce std;
int m,n,array[m][n];
int main()
{
   cin>>m>>n;
   .
   .
   .
}

而且我想以某种方式将变量 m & n 的输入值反映到我原来的 array.How 中? 而且在实现上面的代码时它给出了 "Error Bound Is not an Integer Constant"

的错误

谢谢

让我们将这个全局定义为 int** 数组,然后在 main 函数中为数组动态分配内存。

#include <iostream>
using namespace std;
int** array;

int main()
{
    int xSize;
    int ySize;
    cin >> xSize;
    cin >> ySize;

    int** array = new int*[xSize];
    for(int i = 0; i < xSize; ++i)
    {
        array[i] = new int[ySize];
    }

    return 0;
}

为了静态分配多维数组,必须在编译时知道维度。

由于直到运行时才知道您的维度,因此您需要使用动态内存分配。

在 C++ 中有多种动态分配多维数组的方法,我认为其中 none 是完全令人满意的。由于这是一个 C++ 问题,我将重点关注 C++ 答案,而不是 C,并尽可能使用 RAII 类型和标准库容器。

Boost.Multi-数组

我认为最好的选择是使用 boost 库中的 multi_array

#include <iostream>
#include "boost/multi_array.hpp"

int main() {
  int m;
  int n;

  std::cin >> m >> n;

  boost::multi_array<int, 2> array(boost::extents[m][n]);
}

boost::multi_array 专为此目的而设计,高效、强大并提供传统的 C 多维数组语法,但您确实需要使用第三方库。

向量中的向量

在标准 C++ 中实现动态多维数组的最简单方法是使用向量的向量:

std::vector<std::vector<int>> array(m, std::vector<int>(n));

这也有传统的 C 多维数组语法,但效率可能不是很高。 std::vector 将为每个内部数组进行分配,这可能会增加大量开销并可能导致数据局部性差。

单向量

一种选择是根本不使用多维数组并分配单个连续数组:

std::vector<int> array(m*n);

array[13+n*21] = 7;

但您需要转换为单个索引才能访问元素。

单个向量和指针数组

另一种选择是分配一个向量来连续存储数据,然后分配第二个指针向量来提供多维数组语法。

std::vector<int> array_data(n*m);
std::vector<int*> array(n);
for (int i = 0; i != n; ++i)
  array[i] = array_data.data() + m*i;

这应该是相对有效的,但需要一些额外的设置。您还失去了标准库容器在内部维度上的优势。